Apache kafka 在jdbc接收器连接器中使用kafka SMT将avro模式中的映射字段转换为字符串?

Apache kafka 在jdbc接收器连接器中使用kafka SMT将avro模式中的映射字段转换为字符串?,apache-kafka,apache-kafka-connect,Apache Kafka,Apache Kafka Connect,我有一个avro模式,定义如下: [ { "namespace": "com.fun.message", "type": "record", "name": "FileData", "doc": "Avro Schema for FileData", "fields": [ {"name": "id", "type": "string", "doc": "Unique file id" }, {"name": "ab

我有一个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接收器连接器将这些数据推送到postgres,这样我就可以将模式中的
“metaData”
字段(映射类型)转换为字符串。我该怎么做

您需要使用SMT和AFAIK目前没有完全满足您要求的SMT(
ExtractField
是一个
Map.get
操作,因此不能一次提取嵌套字段)。您可以看看Debezium的SMT,您可以修改它来提取嵌套字段


UnwrapFromEnvelope
用于从更复杂的结构中提取字段,如Debezium形成的数据(我相信与您的结构类似)

你研究过简单的消息转换吗?是的,我对SMT做了很多研究,并查阅了这些文档@cricket_007;好的,您在实现自己的功能时遇到了哪些问题?或者,您是否尝试过在应用JDBC接收器之前在数据上运行KStreams
mapValues()
函数?是的,我部署了一个kafka流处理器,它为我执行此转换。@cricket\u 007Yes我发现了。但这并不能使结构或贴图变平。所以,如果我想将映射或结构转换为字符串,那么我需要自定义此转换?