如何解决如何在Confluent Kafka Connect中将Timestamp值格式化为Date格式-JDBC Oracle Source Connector
我已经在Kafka Connect中设置了JDBC Oracle Source Connector,并且在Oracle表中有一个timestamp列,其值设置为日期格式“ 21-MAR-18 05.39.44.0194990 AM”。
Oracle表中的所有数据都被提取到Kafka主题中,但是oracle表中具有日期格式的列(timestamp列)的值被转换为毫秒,并在主题中显示为毫秒值。我想收到Oracle表中的日期格式。
{
"name":"JDBC_CONN_1","config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector","connection.url": "jdbc:oracle:thin:@<hostname>:1521/<servicename>","connection.user": "User","connection.password": "Password","table.whitelist": "Table_Name","catalog.pattern": "","schema.pattern": "Schema_Name","mode": "bulk","poll.interval.ms": "1000","numeric.mapping":"best_fit","topic.prefix": "JDBC_CONN_1"
}
}
数据库表列:
UPDATED_ON TIMESTAMP(6) Not Null
column value - 27-MAR-18 05.39.44.0194490 AM
主题中的值:1522129184019(等效毫秒格式)
解决方法
您可以使用SMT TimeStampConverter
https://docs.confluent.io/current/connect/transforms/timestampconverter.html#timestampconverter
用于解决您问题的示例缝线:
"transforms": "TimestampConverter","transforms.TimestampConverter.type": "org.apache.kafka.connect.transforms.TimestampConverter$Value","transforms.TimestampConverter.format": "yyyy-MM-dd"
"transforms.TimestampConverter.target.type": "string"
之前:1556204536000
之后:"2014-04-25"
解决此问题的一种简单而优雅的方法是在 MySQL 源上使用此属性:
"time.precision.mode":"connect"
这将使用 Kafka Connect 内置日期类型处理日期:
connect 使用 Kafka Connect 内置的时间、日期和时间戳表示来表示时间和时间戳值。无论数据库列精度如何,它都使用毫秒精度。
此属性的默认值为“adaptive_time_microseconds”:
adaptive_time_microseconds(默认值)捕获与数据库中完全相同的日期、日期时间和时间戳值。它使用基于数据库列类型的毫秒、微秒或纳秒精度值。一个例外是 TIME 类型的字段,它们总是被捕获为微秒。
有关详细信息,请参阅 Debezium MySQL source documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。