Преобразование Kafka Connect: извлечение значения Long из поля json и вставка в качестве ключа - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий json по теме, которую соединитель JDBC публикует в

{"APP_SETTING_ID":9,"APP_SETTING_NAME":"my_name","SETTING_KEY":"my_setting_key"}

Вот мой файл соединителя

name=data.app_setting
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
poll.interval.ms=500
tasks.max=4
mode=timestamp
query=SELECT APP_SETTING_ID, APP_SETTING_NAME, SETTING_KEY,FROM MY_TABLE with (nolock)
timestamp.column.name=LAST_MOD_DATE
topic.prefix=data.app_setting

key.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=false

transforms=InsertKey
transforms.InsertKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.InsertKey.fields=APP_SETTING_ID

Это добавляет ключ, но это также формат jsonкак

{"APP_SETTING_ID":9}

Хотя я просто хочу, чтобы 9 был ключом вместо карты.В базе данных он хранится в виде значения Long.

1 Ответ

0 голосов
/ 11 октября 2018

ValueToKey принимает список полей в значении и возвращает сопоставление этих полей их значениям.

Я думаю, вам нужно второе преобразование, чтобы извлечь только одно из этих полей.

transforms=ReplaceKey,ExtractKey

# Replaces the key with fields in the value. Creates a map for all listed fields
transforms.ReplaceKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.ReplaceKey.fields=APP_SETTING_ID

# Extracts a specfic field from the key, assuming it's a map/struct type
transforms.ExtractKey.type=org.apache.kafka.connect.transforms.ExtractField$Key
transforms.ExtractKey.field=APP_SETTING_ID
...