JDBC Teradata Sink:如何插入空值

时间:2019-06-05 11:45:21

标签: jdbc apache-kafka teradata apache-kafka-connect

我正在尝试将数据从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

有没有办法做到这一点?我不知道是否必须将某些代码更改到接收器中,或者仅更改连接器配置。

2 个答案:

答案 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表中。