Почему Kafka Connect по-разному обрабатывает столбцы меток времени? - PullRequest
0 голосов
/ 31 января 2020

У меня настроена конфигурация Kafka Connect для извлечения данных из DB2. Я не использую Avro, просто из коробки json. Среди столбцов в БД есть несколько столбцов временных меток, и когда они передаются в потоковом режиме, они выглядят так:

"Process_start_ts": 1578600031762,
"Process_end_ts": 1579268248183,
"created_ts": 1579268247984,
"updated_ts": {
 "long": 1579268248182
 }
}

Последний столбец отображается с этим подэлементом, а остальные 3 - нет. (Это создаст проблемы для потребителя.) Единственное, что я могу видеть, это то, что в БД этот столбец по умолчанию имеет значение null.

enter image description here

Есть ли способ заставить этот столбец отображаться в сообщении как предыдущие 3?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Я не уверен, created отличается от первых двух. Значение по-прежнему длинное, только ключ - все строчные. Непонятно, как узнать, каким должно быть значение по умолчанию - вы уверены, что не используете AvroConverter? Если нет, то неясно, какие поля будут иметь значения по умолчанию

Обновленное время вложено так, на основе спецификаций Avro или структурированных JSON Kafka Connect, в которых говорится, что имя типа включено как часть записи в явно обозначить тип поля, допускающего обнуление

0 голосов
/ 01 февраля 2020

Попробуйте сгладить ваше сообщение, используя Kafka Connect Transformations .

В приведенном ниже фрагменте конфигурации показано, как использовать Flatten для объединения имен полей с символом точки . (необходимо добавить эти строки в конфигурацию соединителя):

"transforms": "flatten",
"transforms.flatten.type": "org.apache.kafka.connect.transforms.Flatten$Value",
"transforms.flatten.delimiter": "."

В результате ваше сообщение JSON должно выглядеть следующим образом:

{
  "Process_start_ts": 1578600031762,
  "Process_end_ts": 1579268248183,
  "created_ts": 1579268247984,
  "updated_ts.long": 1579268248182
}

См. пример Сгладить SMT для JSON.

...