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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 0ca79c26f3d [fix](catalog) Fix ClickHouse DataTime64 precision parsing 
(#26980)
0ca79c26f3d is described below

commit 0ca79c26f3d7b65ad5473d9efa9534098b937459
Author: zy-kkk <zhongy...@gmail.com>
AuthorDate: Tue Nov 14 23:50:52 2023 +0800

    [fix](catalog) Fix ClickHouse DataTime64 precision parsing (#26980)
---
 .../clickhouse/init/03-create-table.sql             |   9 +++++++++
 .../docker-compose/clickhouse/init/04-insert.sql    |   2 +-
 .../jdbc/client/JdbcClickHouseClient.java           |  20 +++++++-------------
 regression-test/conf/regression-conf.groovy         |   8 ++++----
 .../jdbc/test_clickhouse_jdbc_catalog.out           | Bin 4887 -> 4942 bytes
 .../jdbc/test_clickhouse_jdbc_catalog.groovy        |   2 ++
 6 files changed, 23 insertions(+), 18 deletions(-)

diff --git 
a/docker/thirdparties/docker-compose/clickhouse/init/03-create-table.sql 
b/docker/thirdparties/docker-compose/clickhouse/init/03-create-table.sql
index b09c5f1543a..34f03796e76 100644
--- a/docker/thirdparties/docker-compose/clickhouse/init/03-create-table.sql
+++ b/docker/thirdparties/docker-compose/clickhouse/init/03-create-table.sql
@@ -279,4 +279,13 @@ CREATE TABLE doris_test.ts
     ts UInt64
 )
 ENGINE = MergeTree
+ORDER BY id;
+
+CREATE TABLE doris_test.dt_with_tz
+(
+    id Int64,
+    dt1 DateTime('Asia/Shanghai'),
+    dt2 DateTime64(6, 'Asia/Shanghai')
+)
+ENGINE = MergeTree
 ORDER BY id;
\ No newline at end of file
diff --git a/docker/thirdparties/docker-compose/clickhouse/init/04-insert.sql 
b/docker/thirdparties/docker-compose/clickhouse/init/04-insert.sql
index f8af30e8015..08b5d034aa1 100644
--- a/docker/thirdparties/docker-compose/clickhouse/init/04-insert.sql
+++ b/docker/thirdparties/docker-compose/clickhouse/init/04-insert.sql
@@ -54,4 +54,4 @@ INSERT INTO doris_test.final_test Values (1, 'second');
 
 INSERT INTO doris_test.ts values (1,1694438743);
 
-
+INSERT INTO doris_test.dt_with_tz values(1, '2022-01-02 00:00:00','2022-01-02 
00:00:00.000000');
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
index f25fabcc3c8..a6088ad11ca 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
@@ -73,20 +73,14 @@ public class JdbcClickHouseClient extends JdbcClient {
             if (ckType.startsWith("DateTime(") || ckType.equals("DateTime")) {
                 return ScalarType.createDatetimeV2Type(0);
             } else {
-                int indexStart = ckType.indexOf('(');
-                int indexEnd = ckType.indexOf(')');
-                if (indexStart != -1 && indexEnd != -1) {
-                    String scaleStr = ckType.substring(indexStart + 1, 
indexEnd);
-                    int scale = Integer.parseInt(scaleStr);
-                    if (scale > JDBC_DATETIME_SCALE) {
-                        scale = JDBC_DATETIME_SCALE;
-                    }
-                    // return with the actual scale
-                    return ScalarType.createDatetimeV2Type(scale);
-                } else {
-                    // default precision if not specified
-                    return 
ScalarType.createDatetimeV2Type(JDBC_DATETIME_SCALE);
+                // DateTime64 with millisecond precision
+                // Datetime64(6) / DateTime64(6, 'Asia/Shanghai')
+                String[] accuracy = ckType.substring(11, ckType.length() - 
1).split(", ");
+                int precision = Integer.parseInt(accuracy[0]);
+                if (precision > 6) {
+                    precision = JDBC_DATETIME_SCALE;
                 }
+                return ScalarType.createDatetimeV2Type(precision);
             }
         }
 
diff --git a/regression-test/conf/regression-conf.groovy 
b/regression-test/conf/regression-conf.groovy
index dd3d1c29b34..b0ff6169397 100644
--- a/regression-test/conf/regression-conf.groovy
+++ b/regression-test/conf/regression-conf.groovy
@@ -24,8 +24,8 @@ defaultDb = "regression_test"
 // init cmd like: select @@session.tx_read_only
 // at each time we connect.
 // add allowLoadLocalInfile so that the jdbc can execute mysql load data from 
client.
-jdbcUrl = 
"jdbc:mysql://127.0.0.1:9632/?useLocalSessionState=true&allowLoadLocalInfile=true"
-targetJdbcUrl = 
"jdbc:mysql://127.0.0.1:9632/?useLocalSessionState=true&allowLoadLocalInfile=true"
+jdbcUrl = 
"jdbc:mysql://127.0.0.1:9030/?useLocalSessionState=true&allowLoadLocalInfile=true"
+targetJdbcUrl = 
"jdbc:mysql://127.0.0.1:9030/?useLocalSessionState=true&allowLoadLocalInfile=true"
 jdbcUser = "root"
 jdbcPassword = ""
 
@@ -35,7 +35,7 @@ syncerAddress = "127.0.0.1:9190"
 feSyncerUser = "root"
 feSyncerPassword = ""
 
-feHttpAddress = "127.0.0.1:8632"
+feHttpAddress = "127.0.0.1:8030"
 feHttpUser = "root"
 feHttpPassword = ""
 
@@ -86,7 +86,7 @@ sk=""
 // jdbc connector test config
 // To enable jdbc test, you need first start mysql/pg container.
 // See `docker/thirdparties/start-thirdparties-docker.sh`
-enableJdbcTest=true
+enableJdbcTest=false
 mysql_57_port=3316
 pg_14_port=5442
 oracle_11_port=1521
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.out 
b/regression-test/data/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.out
index 5f2d70696c3..dcffcfe9ca7 100644
Binary files 
a/regression-test/data/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.out 
and 
b/regression-test/data/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.out 
differ
diff --git 
a/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy
 
b/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy
index 987cbe94027..294ee63e583 100644
--- 
a/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy
+++ 
b/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy
@@ -91,6 +91,8 @@ suite("test_clickhouse_jdbc_catalog", 
"p0,external,clickhouse,external_docker,ex
             contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE 
("ts" <= toUnixTimestamp(FROM_UNIXTIME(ts, '%Y-%m-%d')))"""
         }
 
+        order_qt_dt_with_tz """ select * from dt_with_tz order by id; """
+
         sql """ drop catalog if exists ${catalog_name} """
     }
 }


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

Reply via email to