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