雪花到Kafka主题使用JdbcSourceConnector时区问题

jm2pwxwz  于 2023-02-03  发布在  Apache
关注(0)|答案(1)|浏览(127)

我正在使用POC用例设置JDBC连接器从Snowflake数据库获取数据并将其推送到Kafka主题。我遇到了时区相关的问题,例外是Kafka Connect Date type should not have any time fields set to non-zero values
我使用雪花视图来获取数据,视图列的数据类型如下:LOADDATE是时间戳列,它的数据类型是TIMESTAMP_NTZ(9),其中NTZ不是时区,而是UTC。

AGENTFIRSTNAME    VARCHAR(200)
AGENTMIDDLENAME    VARCHAR(200)
AGENTLASTNAME    VARCHAR(200)
AGENTNAME    VARCHAR(400)
AGENTKEY    NUMBER(38,0)
ISAGENCY    BOOLEAN
NPN            VARCHAR(50)
AGENTNUMBER    VARCHAR(100)
AGENTSTATE    VARCHAR(50)
VUENAME            VARCHAR(100)
GROUPNAME    VARCHAR(200)
TYPENAME    VARCHAR(80)
SUBMITDATE    DATE
CONFNUMBER    VARCHAR(100)
SRCE            VARCHAR(100)
INSFIRSTNAME    VARCHAR(16777216)
INSLASTNAME    VARCHAR(16777216)
INSCITY            VARCHAR(16777216)
INSSTATE    VARCHAR(16777216)
INSBIRTHDATE    DATE
LOADDATE    TIMESTAMP_NTZ(9)

我已经参考了stackoverflow和在线论坛,要解决这个问题Kafka Connect Date type should not have any time fields set to non-zero values,建议在连接器配置db中设置。timezone参数:
我在雪花查询窗口中运行了查询SHOW PARAMETERS LIKE 'TIMEZONE' IN ACCOUNT;以查找时区,它返回了America/Los_Angeles。

我试过使用America/Los_Angeles作为时区,然后我也试过在sfconnector.json中使用UTC作为时区,并重建了docker映像,然后我运行了docker容器,但到目前为止,我没有在Kafka主题中发送消息。
我已在containerlog文件DataException中附加了异常:Kafka Connect Date type should not have any time fields set to non-zero values.
例外情况:

2023-01-27 09:34:50  (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig)
2023-01-27 09:35:01 [2023-01-27 15:35:01,039] ERROR Error encountered in task jdbc-snowflake-source-0. Executing stage 'VALUE_CONVERTER' with class 'io.confluent.connect.avro.AvroConverter', where source record is = SourceRecord{sourcePartition={protocol=1, table=DEV_ED.DBO.VW_CENTERENROLLMENT_IC}, sourceOffset={}} ConnectRecord{topic='VW_CENTERENROLLMENT_IC', kafkaPartition=null, key=null, keySchema=null, value=Struct{AGENTFIRSTNAME=GRECHEN,AGENTMIDDLENAME=LYNN,AGENTLASTNAME=SOWELL,AGENTNAME=GRECHEN LYNN SOWELL,AGENTKEY=690042,ISAGENCY=false,NPN=8991475,AGENTNUMBER=8991475,AGENTSTATE=MI,VUENAME=POE,GROUPNAME=Ana,TYPENAME=PDP,SUBMITDATE=2020-10-20,CONFNUMBER=SMVW8PDYWC,SOURCE=Sunfest,INSFIRSTNAME=Mary,INSLASTNAME=Hoefler,INSCITY=Grand Rapids,INSSTATE=MI,INSBIRTHDATE=1970-09-21,LOADDATE=2020-12-09 16:29:51.0}, valueSchema=Schema{VW_CENTERENROLLMENT_IC:STRUCT}, timestamp=null, headers=ConnectHeaders(headers=)}. (org.apache.kafka.connect.runtime.errors.LogReporter)
2023-01-27 09:35:01 org.apache.kafka.connect.errors.DataException: Kafka Connect Date type should not have any time fields set to non-zero values.

附件是sfconnector配置和完整的ContainerLog。
sf连接器配置:

{
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"mode": "timestamp",    
"timestamp.column.name": "LOADDATE",
"db.timezone": "America/Los_Angeles", 
"numeric.mapping": "best_fit",
"errors.log.include.messages": "true",    
"tasks.max": "1",
"validate.non.null": "false",   
"connection.url": "jdbc:snowflake://dp8881.central-us.azure.snowflakecomputing.com/?warehouse=ED_WH&db=DEV_ED&role=FR_IC_ANLYST&schema=DBO&user=IC_SERVICE_ACT&private_key_file=/tmp/snowflake_key.p8",
"errors.log.enable": "true", 
"table.whitelist": "DEV_ED.DBO.VW_CENTERENROLLMENT_IC",
"table.types": "VIEW"

}
谢谢瓦姆希

gfttwv5a

gfttwv5a1#

在解决问题时,我发现问题是由视图中的Timestamp和Date列引起的。我必须使用convert_timezone将视图中的Timestamp和所有DATE列转换为UTC。使用convert_timezone更新:
将时区(“UTC”,加载日期)转换为加载日期,将时区(“UTC”,提交日期)转换为提交日期,将时区(“UTC”,出生日期)转换为出生日期。
上述视图更新后,创建了Kafka主题,并将消息存储到该主题中,但观察到所有三个convert_timezone列数据(即加载日期、提交日期、出生日期)均缺失/未记录在Kafka主题中。
根据Docker容器日志,警告/错误消息记录为“TIMESTAMPTZ当前不受支持”
但是,当我将这三个日期列转换为CHAR时,这些值也存储到Kafka主题中。
谢谢瓦姆希

相关问题