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 4398b91576 [Fix](multi catalog)Change all partition names to lower 
case (#19816)
4398b91576 is described below

commit 4398b9157605048d8dec44255ba3f5af760e56e7
Author: Jibing-Li <[email protected]>
AuthorDate: Tue May 23 09:31:31 2023 +0800

    [Fix](multi catalog)Change all partition names to lower case (#19816)
    
    Iceberg table partition name may contain upper case characters, for 
example: City=xxx, Nation=xxx.
    But in Doris, all column names are in lower case. Here we transfer the 
partition name to lower case to keep consist with column name.
---
 .../doris/planner/external/HiveScanNode.java       |   2 +-
 .../planner/external/iceberg/IcebergScanNode.java  |   2 +-
 .../iceberg_partition_upper_case_nereids.out       | 109 +++++++++++++++++++++
 .../iceberg_partition_upper_case_nereids.groovy    |  84 ++++++++++++++++
 4 files changed, 195 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanNode.java
index 560278cb48..956ad0d3e5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/HiveScanNode.java
@@ -209,7 +209,7 @@ public class HiveScanNode extends FileQueryScanNode {
     @Override
     public List<String> getPathPartitionKeys() {
         return hmsTable.getRemoteTable().getPartitionKeys()
-                
.stream().map(FieldSchema::getName).collect(Collectors.toList());
+                
.stream().map(FieldSchema::getName).map(String::toLowerCase).collect(Collectors.toList());
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/iceberg/IcebergScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/iceberg/IcebergScanNode.java
index c149f24525..5038ecb476 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/iceberg/IcebergScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/iceberg/IcebergScanNode.java
@@ -272,7 +272,7 @@ public class IcebergScanNode extends FileQueryScanNode {
 
     @Override
     public List<String> getPathPartitionKeys() throws UserException {
-        return 
source.getIcebergTable().spec().fields().stream().map(PartitionField::name)
+        return 
source.getIcebergTable().spec().fields().stream().map(PartitionField::name).map(String::toLowerCase)
             .collect(Collectors.toList());
     }
 
diff --git 
a/regression-test/data/external_table_emr_p2/iceberg/iceberg_partition_upper_case_nereids.out
 
b/regression-test/data/external_table_emr_p2/iceberg/iceberg_partition_upper_case_nereids.out
new file mode 100644
index 0000000000..e286103bbd
--- /dev/null
+++ 
b/regression-test/data/external_table_emr_p2/iceberg/iceberg_partition_upper_case_nereids.out
@@ -0,0 +1,109 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !orcupper1 --
+1      k2_1    k3_1    Beijing
+2      k2_2    k3_2    Beijing
+3      k2_3    k3_3    Shanghai
+4      k2_4    k3_4    Shanghai
+
+-- !orcupper2 --
+1      Beijing
+2      Beijing
+3      Shanghai
+4      Shanghai
+
+-- !orcupper3 --
+1      k2_1
+2      k2_2
+3      k2_3
+4      k2_4
+
+-- !orcupper4 --
+Beijing
+Beijing
+Shanghai
+Shanghai
+
+-- !orcupper5 --
+2      k2_2    k3_2    Beijing
+
+-- !orclower1 --
+1      k2_1    k3_1    Beijing
+2      k2_2    k3_2    Beijing
+3      k2_3    k3_3    Shanghai
+4      k2_4    k3_4    Shanghai
+
+-- !orclower1 --
+1      Beijing
+2      Beijing
+3      Shanghai
+4      Shanghai
+
+-- !orclower1 --
+1      k2_1
+2      k2_2
+3      k2_3
+4      k2_4
+
+-- !orclower1 --
+Beijing
+Beijing
+Shanghai
+Shanghai
+
+-- !orclower1 --
+2      k2_2    k3_2    Beijing
+
+-- !parquetupper1 --
+1      k2_1    k3_1    Beijing
+2      k2_2    k3_2    Beijing
+3      k2_3    k3_3    Shanghai
+4      k2_4    k3_4    Shanghai
+
+-- !parquetupper2 --
+1      Beijing
+2      Beijing
+3      Shanghai
+4      Shanghai
+
+-- !parquetupper3 --
+1      k2_1
+2      k2_2
+3      k2_3
+4      k2_4
+
+-- !parquetupper4 --
+Beijing
+Beijing
+Shanghai
+Shanghai
+
+-- !parquetupper5 --
+2      k2_2    k3_2    Beijing
+
+-- !parquetlower1 --
+1      k2_1    k3_1    Beijing
+2      k2_2    k3_2    Beijing
+3      k2_3    k3_3    Shanghai
+4      k2_4    k3_4    Shanghai
+
+-- !parquetlower2 --
+1      Beijing
+2      Beijing
+3      Shanghai
+4      Shanghai
+
+-- !parquetlower3 --
+1      k2_1
+2      k2_2
+3      k2_3
+4      k2_4
+
+-- !parquetlower4 --
+Beijing
+Beijing
+Shanghai
+Shanghai
+
+-- !parquetlower5 --
+2      k2_2    k3_2    Beijing
+
diff --git 
a/regression-test/suites/external_table_emr_p2/iceberg/iceberg_partition_upper_case_nereids.groovy
 
b/regression-test/suites/external_table_emr_p2/iceberg/iceberg_partition_upper_case_nereids.groovy
new file mode 100644
index 0000000000..3617c4620b
--- /dev/null
+++ 
b/regression-test/suites/external_table_emr_p2/iceberg/iceberg_partition_upper_case_nereids.groovy
@@ -0,0 +1,84 @@
+// 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.
+
+suite("iceberg_partition_upper_case_nereids", "p2") {
+    def orc_upper1 = """select * from iceberg_partition_upper_case_orc order 
by k1;"""
+    def orc_upper2 = """select k1, city from iceberg_partition_upper_case_orc 
order by k1;"""
+    def orc_upper3 = """select k1, k2 from iceberg_partition_upper_case_orc 
order by k1;"""
+    def orc_upper4 = """select city from iceberg_partition_upper_case_orc 
order by city;"""
+    def orc_upper5 = """select * from iceberg_partition_upper_case_orc where 
k1>1 and city='Beijing' order by k1;"""
+
+    def orc_lower1 = """select * from iceberg_partition_lower_case_orc order 
by k1;"""
+    def orc_lower2 = """select k1, city from iceberg_partition_lower_case_orc 
order by k1;"""
+    def orc_lower3 = """select k1, k2 from iceberg_partition_lower_case_orc 
order by k1;"""
+    def orc_lower4 = """select city from iceberg_partition_lower_case_orc 
order by city;"""
+    def orc_lower5 = """select * from iceberg_partition_lower_case_orc where 
k1>1 and city='Beijing' order by k1;"""
+
+    def parquet_upper1 = """select * from iceberg_partition_upper_case_parquet 
order by k1;"""
+    def parquet_upper2 = """select k1, city from 
iceberg_partition_upper_case_parquet order by k1;"""
+    def parquet_upper3 = """select k1, k2 from 
iceberg_partition_upper_case_parquet order by k1;"""
+    def parquet_upper4 = """select city from 
iceberg_partition_upper_case_parquet order by city;"""
+    def parquet_upper5 = """select * from iceberg_partition_upper_case_parquet 
where k1>1 and city='Beijing' order by k1;"""
+
+    def parquet_lower1 = """select * from iceberg_partition_lower_case_parquet 
order by k1;"""
+    def parquet_lower2 = """select k1, city from 
iceberg_partition_lower_case_parquet order by k1;"""
+    def parquet_lower3 = """select k1, k2 from 
iceberg_partition_lower_case_parquet order by k1;"""
+    def parquet_lower4 = """select city from 
iceberg_partition_lower_case_parquet order by city;"""
+    def parquet_lower5 = """select * from iceberg_partition_lower_case_parquet 
where k1>1 and city='Beijing' order by k1;"""
+
+    String enabled = context.config.otherConfigs.get("enableExternalHiveTest")
+    if (enabled != null && enabled.equalsIgnoreCase("true")) {
+        String extHiveHmsHost = 
context.config.otherConfigs.get("extHiveHmsHost")
+        String extHiveHmsPort = 
context.config.otherConfigs.get("extHiveHmsPort")
+        String catalog_name = "iceberg_partition_nereids"
+        sql """drop catalog if exists ${catalog_name};"""
+        sql """
+            create catalog if not exists ${catalog_name} properties (
+                'type'='hms',
+                'hive.metastore.uris' = 
'thrift://${extHiveHmsHost}:${extHiveHmsPort}'
+            );
+        """
+        logger.info("catalog " + catalog_name + " created")
+        sql """switch ${catalog_name};"""
+        logger.info("switched to catalog " + catalog_name)
+        sql """use multi_catalog;"""
+        sql """set enable_nereids_planner=true;"""
+        sql """set enable_fallback_to_original_planner=false;"""
+        qt_orcupper1 orc_upper1
+        qt_orcupper2 orc_upper2
+        qt_orcupper3 orc_upper3
+        qt_orcupper4 orc_upper4
+        qt_orcupper5 orc_upper5
+        qt_orclower1 orc_lower1
+        qt_orclower1 orc_lower2
+        qt_orclower1 orc_lower3
+        qt_orclower1 orc_lower4
+        qt_orclower1 orc_lower5
+        qt_parquetupper1 parquet_upper1
+        qt_parquetupper2 parquet_upper2
+        qt_parquetupper3 parquet_upper3
+        qt_parquetupper4 parquet_upper4
+        qt_parquetupper5 parquet_upper5
+        qt_parquetlower1 parquet_lower1
+        qt_parquetlower2 parquet_lower2
+        qt_parquetlower3 parquet_lower3
+        qt_parquetlower4 parquet_lower4
+        qt_parquetlower5 parquet_lower5
+
+    }
+}
+


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

Reply via email to