【发布时间】:2021-06-28 04:45:25
【问题描述】:
我正在 Postgres 和 Oracle 数据库之间实现基于 CDC 的复制。对于源连接器,我使用 Debezium 的 Postgres 连接器,而对于接收器连接器,我使用 Confluent 的 JDBC Sink 连接器。
在 Postgres 数据库中,所有的表都是小写的,但在 Oracle 数据库中,表都是大写的。如何在 JDBC 接收器连接器中动态设置配置,这样我就不需要在 transforms.route.replacement 中设置硬编码的大写表名?目前,如果我没有在配置中手动将目标表名称设置为大写,则连接器会添加双引号。然后,我收到以下错误:
原因:org.apache.kafka.connect.errors.ConnectException:表“TEST”.“dummy_table”丢失并且自动创建被禁用
我已禁用自动创建,因为我不需要它。
以下是我的 JDBC 接收器连接器配置示例。我省略了一些字段,如连接 url 等。如果我像这样离开配置,每次我需要添加一个新表时,我都需要创建一个新的 JDBC 接收器连接器。
{
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"tasks.max": "1",
"topics": "test.public.dummy_table",
"transforms": "route,unwrap",
"transforms.route.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.route.regex": "([^.]+)\\.([^.]+)\\.([^.]+)",
"transforms.route.replacement": "TEST.DUMMY_TABLE", // I want to use TEST.$3 here, but apply uppercase. Is it possible?
"transforms.unwrap.drop.tombstones": "false",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"pk.mode": "record_key",
"key.converter": "io.confluent.connect.avro.AvroConverter",
"pk.fields": "id",
"quote.sql.identifiers": "never"
}
是否可以使用 transforms.route.replacement 实现表名大写转换或告诉 sink 连接器不要添加双引号?如果没有,您能否建议如何实施?提前谢谢你。
【问题讨论】:
-
我认为
quote.sql.identifiers修复了报价问题...?但是不,正则表达式不能应用大小写格式 -
@OneCricketeer 出于某种原因,它从字段名称(列)中删除了引号,而不是表名。我是否缺少任何设置?
-
该设置的描述是何时引用表名、列名和SQL语句中的其他标识符。听起来可能是一个错误
标签: oracle jdbc apache-kafka-connect confluent-platform debezium