如何在Confluent Kafka connect-JDBC Oracle源连接器中将时间戳值格式化为日期格式
我在Kafka Connect中设置了一个JDBC Oracle源连接器,在Oracle表中有一个时间戳列,其值设置为日期格式“21-MAR-18 05.39.44.0194990 AM” Oracle表中的所有数据都会提取到Kafka主题中,但Oracle表中日期格式列(时间戳列)的值会转换为毫秒,并在主题中显示为毫秒值。我希望收到Oracle表中的日期格式如何在Confluent Kafka connect-JDBC Oracle源连接器中将时间戳值格式化为日期格式,jdbc,apache-kafka,apache-kafka-connect,Jdbc,Apache Kafka,Apache Kafka Connect,我在Kafka Connect中设置了一个JDBC Oracle源连接器,在Oracle表中有一个时间戳列,其值设置为日期格式“21-MAR-18 05.39.44.0194990 AM” Oracle表中的所有数据都会提取到Kafka主题中,但Oracle表中日期格式列(时间戳列)的值会转换为毫秒,并在主题中显示为毫秒值。我希望收到Oracle表中的日期格式 { "name":"JDBC_CONN_1", "config":
{
"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"
}
}
主题中的值:1522129184019(等效毫秒格式)您可以使用SMT时间转换器 解决问题的示例seam:
"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_微秒(默认值),它捕获的日期、日期时间和时间戳值与数据库中的值完全相同。它使用基于数据库列类型的毫秒、微秒或纳秒精度值。时间类型字段是一个例外,它总是以微秒的形式捕获
有关详细信息,请参见其非日期格式及其字符串格式。。
"time.precision.mode":"connect"