我正在尝试将数据从Kafka插入Teradata。有效负载具有一些空值,并且 JDBC 接收器引发以下错误。
[Teradata JDBC Driver] [TeraJDBC 16.20.00.10] [Error 1063] [SQLState HY000] null is not supported as a data value with this variant of the setObject method; use the setNull method or the setObject method with a targetSqlType parameter
我的连接器配置:
name=teradata-sink-K_C_OSUSR_DGL_DFORM_I1-V2
connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
tasks.max=1
connection.url=connectionString
topics=POPS-P-OSUSR_DGL_DFORM_I1-J-V2-CAL-OUT
topic.prefix=
table.name.format=K_C_OSUSR_DGL_DFORM_I1_V2
batch.size=50000
errors.tolerance=all
errors.deadletterqueue.topic.name=POPS-P-OSUSR_DGL_DFORM_I1-V2-CAL-DEAD
errors.deadletterqueue.topic.replication.factor=1
有没有办法实现这一目标?我不知道我是否必须将一些代码更改为接收器或只是更改连接器配置。
您从某些行中得到错误,这些行肯定如下所示:
ps.setObject(1, val);
如果您尝试插入的val
具有null
值,则会引发异常。
该错误告知您必须指定传入的空值的数据类型。你可以这样做:
ps.setObject(1, val, Types.VARCHAR);
这样,您将NULL
转换为受支持的targetSqlTypes
之一的VARCHAR
。
用于相同目的的另一种选择:
ps.setNull(1, Types.VARCHAR) ;
我们遇到的问题是我们正在使用标准的Kafka Connect来创建接收器(我们不编写任何自定义连接器(。
我们已经为 worker 和连接器配置了 .properties 文件,以在主题和 teradata 表之间创建链接,并使用
.../confluent/bin/connect-standalone <worker.cfg> <connector.cfg>
当我们创建具有"null"值的消息并将其发送到主题时,接收器连接器无法将记录插入TD表中。