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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]