Преобразовать поле Map в схеме avro в строку, используя SMT kafka в jdbc-sink-connector? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть схема avro, определенная следующим образом:

[    
{
    "namespace": "com.fun.message",
    "type": "record",
    "name": "FileData",
    "doc": "Avro Schema for FileData",
    "fields": [
        {"name": "id", "type": "string", "doc": "Unique file id" },
        {"name": "absolutePath", "type": "string", "doc": "Absolute path of file" },
        {"name": "fileName", "type": "string", "doc": "File name" },
        {"name": "source", "type": "string", "doc": "unique identification of source" },
        {"name": "metaData", "type": {"type": "map", "values": "string"}}
    ]
}
]

Я хочу отправить эти данные в postgres, используя jdbc-сток-коннектор, чтобы я мог преобразовать поле "metaData" (тип карты) в моей схеме в строку.Как мне это сделать?

1 Ответ

0 голосов
/ 16 сентября 2018

Вам необходимо использовать SMT и AFAIK. В настоящее время SMT не соответствует вашим требованиям (ExtractField - операция Map.get, поэтому вложенные поля не могут быть извлечены за один проход).Вы можете взглянуть на io.debezium.transforms.UnwrapFromEnvelope SMT в Debezium, который вы можете изменить, чтобы извлечь вложенные поля.

UnwrapFromEnvelope используется для выравнивания событий CDC для извлечения полей из более сложных структур, таких как данные, сформированные Дебезиумом (который, я считаю, похож на вашу структуру).

...