我有一个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"}}
]
}
]
我想使用jdbc-sink-connector将此数据推送到postgres,以便我可以将我的架构中的"metaData"
字段(这是映射类型)转换为字符串。我该怎么做呢?
您需要使用SMT和AFAIK,目前没有完全符合您要求的SMT(ExtractField
是Map.get
操作,因此无法一次性提取嵌套字段)。您可以查看Debezium的io.debezium.transforms.UnwrapFromEnvelope
SMT,您可以修改它以提取嵌套字段。
UnwrapFromEnvelope
被用于CDC Event Flattening,以便从更复杂的结构中提取字段,例如由Debezium形成的数据(我相信它与您的结构类似)。