Altinity / clickhouse-sink-connector

Replicate data from MySQL, Postgres and MongoDB to ClickHouse
https://www.altinity.com
Apache License 2.0
214 stars 48 forks source link

DB::Exception: Syntax error if the database name contains "-" #712

Closed tellienne closed 2 weeks ago

tellienne commented 1 month ago

Hi! In Postgres, our database names contain "-". For example "test-database". we use connector v2.2.0-lt

when we run the connector for this database, we get an error

2024-07-24 11:30:04.208 ERROR - **** Error creating table(debezium_heartbeat), database(test-database) ***
java.sql.SQLException: Code: 62. DB::Exception: Syntax error: failed at position 17 ('-'): -database.`debezium_heartbeat` ON CLUSTER `{cluster}` (`date_column` DateTime64(6) NULL,`_version` UInt64,`_sign` UInt8) Engine=ReplicatedReplacingMergeTree(_versio. Expected one of: token, Dot, UUID, ON, OpeningRoundBracket, storage definition, ENGINE, PARTITION BY, PRIMARY KEY, ORDER BY, SAMPLE BY, TTL, EMPTY AS, AS, COMMENT, INTO OUTFILE, FORMAT, SETTINGS, end of query. (SYNTAX_ERROR) (version 23.10.5.20 (official build))
, server ClickHouseNode [uri=http://172.18.160.7:8123/test-database, options={custom_settings=allow_experimental_object_type=1,insert_allow_materialized_columns=1,client_name=Sink Connector Lightweight}]@1173874030
    at com.clickhouse.jdbc.SqlExceptionUtils.handle(SqlExceptionUtils.java:85) ~[app.jar:?]
    at com.clickhouse.jdbc.SqlExceptionUtils.create(SqlExceptionUtils.java:31) ~[app.jar:?]
    at com.clickhouse.jdbc.SqlExceptionUtils.handle(SqlExceptionUtils.java:90) ~[app.jar:?]
    at com.clickhouse.jdbc.internal.ClickHouseStatementImpl.getLastResponse(ClickHouseStatementImpl.java:122) ~[app.jar:?]
    at com.clickhouse.jdbc.internal.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:474) ~[app.jar:?]
    at com.altinity.clickhouse.sink.connector.db.operations.ClickHouseTableOperationsBase.runQuery(ClickHouseTableOperationsBase.java:106) ~[app.jar:?]
    at com.altinity.clickhouse.sink.connector.db.operations.ClickHouseAutoCreateTable.createNewTable(ClickHouseAutoCreateTable.java:35) ~[app.jar:?]
    at com.altinity.clickhouse.sink.connector.db.DbWriter.<init>(DbWriter.java:124) [app.jar:?]
    at com.altinity.clickhouse.sink.connector.executor.ClickHouseBatchRunnable.getDbWriterForTable(ClickHouseBatchRunnable.java:249) [app.jar:?]
    at com.altinity.clickhouse.sink.connector.executor.ClickHouseBatchRunnable.processRecordsByTopic(ClickHouseBatchRunnable.java:299) [app.jar:?]
    at com.altinity.clickhouse.sink.connector.executor.ClickHouseBatchRunnable.run(ClickHouseBatchRunnable.java:188) [app.jar:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
    at java.lang.Thread.run(Thread.java:833) [?:?]

in the old version of the connector it was possible to use the parameter clickhouse.server.database: and transfer data from "test-database" to "test_database" in clickhouse.
how can we fix the error?

subkanthi commented 1 month ago

You can use this configuration

clickhouse.database.override.map: "employees:employees2, products:productsnew
tellienne commented 1 month ago

I'm trying to use it like

 clickhouse.database.override.map: "test-database:test_database"

but I get an error

2024-07-25 02:56:01.529 ERROR - 
[SF_KAFKA_CONNECTOR] database nametest-database should have at least 2 characters, start with _a-zA-Z, and only contains _$a-zA-z0-9
java.lang.Exception: Invalid clickhouse table
    at com.altinity.clickhouse.sink.connector.common.Utils.parseSourceToDestinationDatabaseMap(Utils.java:89)
    at com.altinity.clickhouse.sink.connector.validators.DatabaseOverrideValidator.ensureValid(DatabaseOverrideValidator.java:17)
    at org.apache.kafka.common.config.ConfigDef.parseValue(ConfigDef.java:499)
    at org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:483)
    at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:113)
    at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:146)
    at com.altinity.clickhouse.sink.connector.ClickHouseSinkConnectorConfig.<init>(ClickHouseSinkConnectorConfig.java:46)
    at com.altinity.clickhouse.sink.connector.ClickHouseSinkConnectorConfig.<init>(ClickHouseSinkConnectorConfig.java:42)
    at com.altinity.clickhouse.debezium.embedded.ClickHouseDebeziumEmbeddedApplication.main(ClickHouseDebeziumEmbeddedApplication.java:87)
tellienne commented 1 month ago

Can you please tell me when version 2.3.0 is planned to be released? We have many databases with "-" in the name :(

subkanthi commented 1 month ago

Can you please tell me when version 2.3.0 is planned to be released? We have many databases with "-" in the name :(

are u able to use this image tag altinityinfra/clickhouse-sink-connector:716-f3f63a01328216e766609fa8280adbe93b7ea320-lt

tellienne commented 1 month ago

This works well, thanks! Until version 2.3.0 is released we will use this image