如何为包含动态键值对的JSON结构创建对应的Avro schema
动态Avro Schema设计方案
你可以直接使用Avro内置的map类型处理data.abc下的动态字符串键值对,Avro的map类型默认键为string类型,仅需指定值的类型即可,完全适配键名不固定的场景。
完整可直接使用的Schema
{ "type": "record", "name": "CustomDataRecord", "fields": [ { "name": "_id", "type": "string" }, { "name": "name", "type": "string" }, { "name": "data", "type": { "type": "record", "name": "DataContainer", "fields": [ { "name": "abc", "type": { "type": "map", "values": "string" } } ] } } ] }
关键说明
data.abc字段定义为map类型是核心逻辑,Avro的map原生支持任意字符串格式的键,不需要提前枚举所有可能的键名,不管是"0001"、"0002"还是其他自定义字符串键都可以正常序列化和反序列化- 如果
abc下的值可能存在多种类型,可以把values的取值改为union类型,比如["string", "int", "null"]即可适配多类型值的场景 - 如果后续
data字段下除了abc还有其他动态键,也可以把整个data字段直接定义为map类型,按需调整即可
内容的提问来源于stack exchange,提问作者Testing
相关产品推荐
相关产品推荐

