我正在尝试将数据从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
有没有办法做到这一点?我不知道是否必须将某些代码更改到接收器中,或者仅更改连接器配置。
答案 0 :(得分:1)
您肯定会从某些行中看到错误,如下所示:
ps.setObject(1, val);
如果您尝试插入的val
具有一个null
值,则此异常将引发。
该错误表明您必须指定传入的空值的数据类型。您可以这样做:
ps.setObject(1, val, Types.VARCHAR);
通过这种方式,您将NULL
投射到受支持的VARCHAR
之一的targetSqlTypes
上。
具有相同目的的另一个选项:
ps.setNull(1, Types.VARCHAR) ;
答案 1 :(得分:0)
我们遇到的问题是我们正在使用标准的Kafka Connect创建接收器(我们未对任何自定义连接器进行编码)。
我们已经为worker和connector配置了.properties文件,以在主题和teradata表之间创建链接,然后使用
运行它.../confluent/bin/connect-standalone <worker.cfg> <connector.cfg>
当我们创建带有“空”值的消息并将其发送到主题中时,接收器连接器无法将记录插入TD表中。