我正在尝试从oracle数据库中的表中复制数据,并尝试将该数据放在kafka主题中。为此,我使用了以下 JDBC 源连接器:
name=JDBC-DB-source
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
connection.password = *******
connection.url = jdbc:oracle:thin:@1.1.1.1:1111/ABCD
connection.user = *****
table.types=TABLE
query= select * from (SELECT * FROM JENNY.WORKFLOW where ID = '565231')
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
mode=timestamp+incrementing
incrementing.column.name=ID
timestamp.column.name=MODIFIED
topic.prefix=workflow_data12
poll.interval.ms=6000
timestamp.delay.interval.ms=60000
transforms:createKey
transforms.createKey.type:org.apache.kafka.connect.transforms.ValueToKey
transforms.createKey.fields:ID
到目前为止一切顺利。我能够将数据放入我的 kafka 主题中。但输出如下所示:
key - {"ID":"u0001"}
value - {"ID":"u0001","MODIFIED":1874644537368}
您可以观察到我的密钥">ID"正在以十六进制格式打印,尽管我在 JDBC 属性文件中使用了 Avro。
(我正在使用kafka-avro-console 消费者在命令行上查看数据(
(列"ID"在预言机数据库中的类型为">NUMBER"。
谁能帮我指出我是否缺少一些财产? 以 Avro 格式正确打印数据。
提前感谢!!
将此属性添加到您的 .properties 文件中,例如在查询之前:
numeric.mapping=best_fit
详细解释可以在这里找到
是的,如果你的数据类型是 NUMERIC 如 Muhammad Arslan Akhtar 所说,请使用 numeric.mapping=best_fit。
如果你的数据类型是十进制,你必须首先在查询中强制转换该列,如下所示,因为numeric.mapping=best_fit对十进制没有用。
select CAST(Price AS NUMERIC(18,4)) as Price from xxx