我有一个想要转换为Avro的JSON文档,并且需要为此指定一种模式。这是我要为其定义avro模式的JSON文档:
{ "uid": 29153333, "somefield": "somevalue", "options": [ { "item1_lvl2": "a", "item2_lvl2": [ { "item1_lvl3": "x1", "item2_lvl3": "y1" }, { "item1_lvl3": "x2", "item2_lvl3": "y2" } ] } ] }
我可以为非复杂类型定义架构,但不能为复杂的“选项”字段定义架构:
{ "namespace" : "my.com.ns", "type" : "record", "fields" : [ {"name": "uid", "type": "int"}, {"name": "somefield", "type": "string"} {"name": "options", "type": .....} ] }
谢谢您的帮助!
您需要使用Avro 复杂类型,尤其是数组和记录。然后将它们嵌套在一起:
{ "namespace" : "my.com.ns", "name": "myrecord", "type" : "record", "fields" : [ {"name": "uid", "type": "int"}, {"name": "somefield", "type": "string"}, {"name": "options", "type": { "type": "array", "items": { "type": "record", "name": "lvl2_record", "fields": [ {"name": "item1_lvl2", "type": "string"}, {"name": "item2_lvl2", "type": { "type": "array", "items": { "type": "record", "name": "lvl3_record", "fields": [ {"name": "item1_lvl3", "type": "string"}, {"name": "item2_lvl3", "type": "string"} ] } }} ] } }} ] }
另外,为了提高可读性,您可以将架构分为多个文件。