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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new c016eb49c56 [enhance](mtmv)When obtaining the partition list fails, 
treat the pai… (#46708)
c016eb49c56 is described below

commit c016eb49c56acb22498e890dc4a3af0abba7ee89
Author: zhangdong <zhangd...@selectdb.com>
AuthorDate: Fri Jan 10 10:46:09 2025 +0800

    [enhance](mtmv)When obtaining the partition list fails, treat the pai… 
(#46708)
    
    …mon table as an unpartitioned table  (#46641)
    
    pick: https://github.com/apache/doris/pull/46641
---
 .../create_preinstalled_scripts/paimon/run01.sql   | 47 +++++++++++++++++++++-
 .../datasource/paimon/PaimonExternalTable.java     |  8 ++++
 .../datasource/paimon/PaimonPartitionInfo.java     |  5 +++
 .../apache/doris/datasource/paimon/PaimonUtil.java | 11 ++++-
 4 files changed, 68 insertions(+), 3 deletions(-)

diff --git 
a/docker/thirdparties/docker-compose/iceberg/scripts/create_preinstalled_scripts/paimon/run01.sql
 
b/docker/thirdparties/docker-compose/iceberg/scripts/create_preinstalled_scripts/paimon/run01.sql
index 7aa4170eab0..7722d094636 100644
--- 
a/docker/thirdparties/docker-compose/iceberg/scripts/create_preinstalled_scripts/paimon/run01.sql
+++ 
b/docker/thirdparties/docker-compose/iceberg/scripts/create_preinstalled_scripts/paimon/run01.sql
@@ -22,4 +22,49 @@ insert into test_tb_mix_format values 
(1,1,'b'),(2,1,'b'),(3,1,'b'),(4,1,'b'),(5
 -- update some data, these splits will be readed by jni
 insert into test_tb_mix_format values 
(1,2,'b'),(2,2,'b'),(3,2,'b'),(4,2,'b'),(5,2,'b');
 -- delete foramt in table properties, doris should get format by file name
-alter table test_tb_mix_format unset TBLPROPERTIES ('file.format');
\ No newline at end of file
+alter table test_tb_mix_format unset TBLPROPERTIES ('file.format');
+
+drop table if exists two_partition;
+CREATE TABLE two_partition (
+   id BIGINT,
+   create_date STRING,
+   region STRING
+) PARTITIONED BY (create_date,region) TBLPROPERTIES (
+    'primary-key' = 'create_date,region,id',
+    'bucket'=10,
+    'file.format'='orc'
+);
+
+insert into two_partition values(1,'2020-01-01','bj');
+insert into two_partition values(2,'2020-01-01','sh');
+insert into two_partition values(3,'2038-01-01','bj');
+insert into two_partition values(4,'2038-01-01','sh');
+insert into two_partition values(5,'2038-01-02','bj');
+
+drop table if exists null_partition;
+CREATE TABLE null_partition (
+   id BIGINT,
+   region STRING
+) PARTITIONED BY (region) TBLPROPERTIES (
+    'primary-key' = 'region,id',
+    'bucket'=10,
+    'file.format'='orc'
+);
+-- null NULL "null" all will be in partition [null]
+insert into null_partition values(1,'bj');
+insert into null_partition values(2,null);
+insert into null_partition values(3,NULL);
+insert into null_partition values(4,'null');
+insert into null_partition values(5,'NULL');
+
+drop table if exists date_partition;
+CREATE TABLE date_partition (
+                               id BIGINT,
+                               create_date DATE
+) PARTITIONED BY (create_date) TBLPROPERTIES (
+    'primary-key' = 'create_date,id',
+    'bucket'=10,
+    'file.format'='orc'
+);
+
+insert into date_partition values(1,date '2020-01-01');
\ No newline at end of file
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonExternalTable.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonExternalTable.java
index 3f22ce4c46b..efd8e6bb7a7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonExternalTable.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonExternalTable.java
@@ -144,9 +144,17 @@ public class PaimonExternalTable extends ExternalTable 
implements MvccTable {
 
     @Override
     public List<Column> getPartitionColumns(Optional<MvccSnapshot> snapshot) {
+        if (isPartitionInvalid(snapshot)) {
+            return Collections.emptyList();
+        }
         return getPaimonSchemaCacheValue(snapshot).getPartitionColumns();
     }
 
+    private boolean isPartitionInvalid(Optional<MvccSnapshot> snapshot) {
+        PaimonSnapshotCacheValue paimonSnapshotCacheValue = 
getOrFetchSnapshotCacheValue(snapshot);
+        return 
paimonSnapshotCacheValue.getPartitionInfo().isPartitionInvalid();
+    }
+
     @Override
     public MvccSnapshot loadSnapshot() {
         return new PaimonMvccSnapshot(getPaimonSnapshotCacheValue());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonPartitionInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonPartitionInfo.java
index 4d3326f8e48..88515a2510d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonPartitionInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonPartitionInfo.java
@@ -45,4 +45,9 @@ public class PaimonPartitionInfo {
     public Map<String, PaimonPartition> getNameToPartition() {
         return nameToPartition;
     }
+
+    public boolean isPartitionInvalid() {
+        // when transfer to partitionItem failed, will not equal
+        return nameToPartitionItem.size() != nameToPartition.size();
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonUtil.java
index 1f7576dca51..b3df41bc5ce 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonUtil.java
@@ -117,7 +117,7 @@ public class PaimonUtil {
     }
 
     public static PaimonPartitionInfo generatePartitionInfo(List<Column> 
partitionColumns,
-            List<PaimonPartition> paimonPartitions) throws AnalysisException {
+            List<PaimonPartition> paimonPartitions) {
         Map<String, PartitionItem> nameToPartitionItem = Maps.newHashMap();
         Map<String, PaimonPartition> nameToPartition = Maps.newHashMap();
         PaimonPartitionInfo partitionInfo = new 
PaimonPartitionInfo(nameToPartitionItem, nameToPartition);
@@ -127,7 +127,14 @@ public class PaimonUtil {
         for (PaimonPartition paimonPartition : paimonPartitions) {
             String partitionName = getPartitionName(partitionColumns, 
paimonPartition.getPartitionValues());
             nameToPartition.put(partitionName, paimonPartition);
-            nameToPartitionItem.put(partitionName, 
toListPartitionItem(partitionName, partitionColumns));
+            try {
+                // partition values return by paimon api, may have problem,
+                // to avoid affecting the query, we catch exceptions here
+                nameToPartitionItem.put(partitionName, 
toListPartitionItem(partitionName, partitionColumns));
+            } catch (Exception e) {
+                LOG.warn("toListPartitionItem failed, partitionColumns: {}, 
partitionValues: {}", partitionColumns,
+                        paimonPartition.getPartitionValues(), e);
+            }
         }
         return partitionInfo;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to