JDBC Teradata Sink: Как вставить нулевые значения - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь вставить данные из Кафки в 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 ]

1 голос
/ 05 июня 2019

Вы получаете ошибку из какой-то строки, которая наверняка выглядит следующим образом:

ps.setObject(1, val);

Это вызовет исключение, если val, который вы пытаетесь вставить, имеет значение null.

Ошибка говорит о том, что вы должны указать тип данных входящих значений NULL. Вы могли бы сделать это:

ps.setObject(1, val, Types.VARCHAR); 

Таким образом, вы кастуете NULL на VARCHAR, одного из поддерживаемых targetSqlTypes.

Еще один вариант для той же цели:

ps.setNull(1, Types.VARCHAR) ;
0 голосов
/ 06 июня 2019

Проблема в том, что мы используем стандартный Kafka Connect для создания приемника (мы не кодируем какой-либо пользовательский соединитель).

Мы настроили оба файла .properties для работника и соединителя для создания связи между темой и таблицей teradata, и мы запускаем ее, используя

.../confluent/bin/connect-standalone <worker.cfg> <connector.cfg>

Когда мы создаем сообщение с «нулевыми» значениями и отправляем его в тему, Sink Connector не может вставить запись в таблицу TD.

...