This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 843ecdf368b [fix](iceberg) Fix s3tables system table (#53137)
843ecdf368b is described below

commit 843ecdf368bb5e12a0b5cb86189acf40ed47a7b0
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sat Jul 12 12:29:23 2025 -0700

    [fix](iceberg) Fix s3tables system table (#53137)
    
    ### What problem does this PR solve?
    
    Problem Summary:
    We miss some dependency on BE side for s3 tables, followup #51190
---
 .../iceberg-metadata-scanner/pom.xml               |   6 +++
 .../s3tables/CustomAwsCredentialsProvider.java     |  45 +++++++++++++++++++++
 fe/be-java-extensions/preload-extensions/pom.xml   |  16 ++++++++
 .../iceberg/test_iceberg_equality_delete.out       | Bin 407 -> 477 bytes
 .../iceberg/test_s3tables_write_partitions.out     | Bin 267 -> 291 bytes
 .../iceberg/iceberg_query_tag_branch.groovy        |  29 +++++++++++++
 .../iceberg/test_iceberg_equality_delete.groovy    |  21 +++++++++-
 .../iceberg/test_iceberg_position_delete.groovy    |   2 +-
 .../iceberg/test_s3tables_write_partitions.groovy  |  19 +++++++++
 9 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/fe/be-java-extensions/iceberg-metadata-scanner/pom.xml 
b/fe/be-java-extensions/iceberg-metadata-scanner/pom.xml
index f563ddf1837..d3c4141a786 100644
--- a/fe/be-java-extensions/iceberg-metadata-scanner/pom.xml
+++ b/fe/be-java-extensions/iceberg-metadata-scanner/pom.xml
@@ -52,6 +52,12 @@ under the License.
             <artifactId>iceberg-core</artifactId>
             <version>${iceberg.version}</version>
         </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>auth</artifactId>
+            <version>${awssdk.version}</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/datasource/iceberg/s3tables/CustomAwsCredentialsProvider.java
 
b/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/datasource/iceberg/s3tables/CustomAwsCredentialsProvider.java
new file mode 100644
index 00000000000..4f35ac930da
--- /dev/null
+++ 
b/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/datasource/iceberg/s3tables/CustomAwsCredentialsProvider.java
@@ -0,0 +1,45 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.datasource.iceberg.s3tables;
+
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.AwsCredentials;
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+
+import java.util.Map;
+
+// Copy from
+// 
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/s3tables/CustomAwsCredentialsProvider.java
+public class CustomAwsCredentialsProvider implements AwsCredentialsProvider {
+    private final String accessKeyId;
+    private final String secretAccessKey;
+
+    public CustomAwsCredentialsProvider(String accessKeyId, String 
secretAccessKey) {
+        this.accessKeyId = accessKeyId;
+        this.secretAccessKey = secretAccessKey;
+    }
+
+    @Override
+    public AwsCredentials resolveCredentials() {
+        return AwsBasicCredentials.create(accessKeyId, secretAccessKey);
+    }
+
+    public static CustomAwsCredentialsProvider create(Map<String, String> 
props) {
+        return new CustomAwsCredentialsProvider(props.get("s3.access-key-id"), 
props.get("s3.secret-access-key"));
+    }
+}
diff --git a/fe/be-java-extensions/preload-extensions/pom.xml 
b/fe/be-java-extensions/preload-extensions/pom.xml
index b64f450de18..077459d816f 100644
--- a/fe/be-java-extensions/preload-extensions/pom.xml
+++ b/fe/be-java-extensions/preload-extensions/pom.xml
@@ -242,6 +242,22 @@ under the License.
             <artifactId>dynamodb</artifactId>
             <version>${awssdk.version}</version>
         </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>s3tables</artifactId>
+            <version>${awssdk.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>software.amazon.s3tables</groupId>
+            <artifactId>s3-tables-catalog-for-iceberg</artifactId>
+            <version>${s3tables.catalog.version}</version>
+        </dependency>
+        <!-- AWS SDK Core -->
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>sdk-core</artifactId>
+            <version>${awssdk.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/regression-test/data/external_table_p0/iceberg/test_iceberg_equality_delete.out
 
b/regression-test/data/external_table_p0/iceberg/test_iceberg_equality_delete.out
index 3a21417f1a7..5bb2deb36d9 100644
Binary files 
a/regression-test/data/external_table_p0/iceberg/test_iceberg_equality_delete.out
 and 
b/regression-test/data/external_table_p0/iceberg/test_iceberg_equality_delete.out
 differ
diff --git 
a/regression-test/data/external_table_p2/iceberg/test_s3tables_write_partitions.out
 
b/regression-test/data/external_table_p2/iceberg/test_s3tables_write_partitions.out
index b206cd3d90d..c0b4eb6ece7 100644
Binary files 
a/regression-test/data/external_table_p2/iceberg/test_s3tables_write_partitions.out
 and 
b/regression-test/data/external_table_p2/iceberg/test_s3tables_write_partitions.out
 differ
diff --git 
a/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy
 
b/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy
index 6ada85953da..4062a6df649 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy
@@ -235,6 +235,35 @@ suite("iceberg_query_tag_branch", 
"p0,external,doris,external_docker,external_do
         query_tag_branch_in_subquery()
         query_exception()
 
+        // test sql. no result check because snapshot_id is changed every time
+        sql """
+            SELECT
+              refs_data.snapshot_id,
+              snapshots.committed_at,
+              snapshots.operation,
+              ARRAY_SORT(refs_data.refs)
+            FROM (
+              SELECT
+                snapshot_id,
+                ARRAY_AGG(CONCAT(type, ':', name)) AS refs
+              FROM
+                tag_branch_table\$refs
+              GROUP BY
+                snapshot_id
+            ) AS refs_data
+            JOIN (
+              SELECT
+                snapshot_id,
+                committed_at,
+                operation
+              FROM
+                tag_branch_table\$snapshots
+            ) AS snapshots
+            ON refs_data.snapshot_id = snapshots.snapshot_id
+            ORDER BY
+              snapshots.committed_at;
+        """
+
     } finally {
         // Restore default values
         sql """  set num_files_in_batch_mode=1024; """ 
diff --git 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_equality_delete.groovy
 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_equality_delete.groovy
index 74a3dc953eb..78b98f24b2f 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_equality_delete.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_equality_delete.groovy
@@ -60,7 +60,26 @@ suite("test_iceberg_equality_delete", 
"p0,external,doris,external_docker,externa
         qt_max3 """select max(val) from customer_flink_three"""
         qt_max3_orc """select max(val) from customer_flink_three_orc"""
 
-        sql """drop catalog ${catalog_name}"""
+        // test sql
+        qt_test_sql """
+            SELECT
+              CASE
+                WHEN content = 0 THEN 'DataFile'
+                WHEN content = 1 THEN 'PositionDeleteFile'
+                WHEN content = 2 THEN 'EqualityDeleteFile'
+                ELSE 'Unknown'
+              END AS ContentType,
+              -- SUM(file_size_in_bytes) AS SizeInBytes,
+              SUM(record_count) AS Records
+            FROM
+              test_db.customer_flink_three_orc\$files
+            GROUP BY
+              ContentType
+            ORDER BY
+              ContentType;
+        """
+
+        // sql """drop catalog ${catalog_name}"""
 }
 
 /*
diff --git 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_position_delete.groovy
 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_position_delete.groovy
index 6a14712a2af..d793cef3568 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_position_delete.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_position_delete.groovy
@@ -164,7 +164,7 @@ suite("test_iceberg_position_delete", 
"p0,external,doris,external_docker,externa
         List<List<Object>> iceberg_position_gen_7 = sql """select id from 
iceberg_position_gen_data where name != "hello word" ;"""
         assertTrue(iceberg_position_gen_7.size() == 5632)
 
-        sql """drop catalog ${catalog_name}"""
+        // sql """drop catalog ${catalog_name}"""
 }
 /*
 
diff --git 
a/regression-test/suites/external_table_p2/iceberg/test_s3tables_write_partitions.groovy
 
b/regression-test/suites/external_table_p2/iceberg/test_s3tables_write_partitions.groovy
index a3b23981ab9..d322cd5ab03 100644
--- 
a/regression-test/suites/external_table_p2/iceberg/test_s3tables_write_partitions.groovy
+++ 
b/regression-test/suites/external_table_p2/iceberg/test_s3tables_write_partitions.groovy
@@ -105,4 +105,23 @@ suite("test_s3tables_write_partitions", 
"p0,external,iceberg,external_docker,ext
     } finally {
     }
 
+    //test sql
+    sql """ switch ${catalog_name};"""
+    sql """ use my_namespace;""" 
+    order_qt_test_sql """
+        SELECT
+          CASE
+            WHEN file_size_in_bytes BETWEEN 0 AND 8 * 1024 * 1024 THEN '0-8M'
+            WHEN file_size_in_bytes BETWEEN 8 * 1024 * 1024 + 1 AND 32 * 1024 
* 1024 THEN '8-32M'
+            WHEN file_size_in_bytes BETWEEN 2 * 1024 * 1024 + 1 AND 128 * 1024 
* 1024 THEN '32-128M'
+            WHEN file_size_in_bytes BETWEEN 128 * 1024 * 1024 + 1 AND 512 * 
1024 * 1024 THEN '128-512M'
+            WHEN file_size_in_bytes > 512 * 1024 * 1024 THEN '> 512M'
+            ELSE 'Unknown'
+          END AS SizeRange,
+          COUNT(*) AS FileNum
+        FROM partitioned_table\$data_files
+        GROUP BY
+          SizeRange;
+    """
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to