Avro允许空白JSON /哈希用于嵌套属性

时间:2018-11-19 12:36:12

标签: schema avro

需要为此创建Avro模式->

 {"city":"XXXXXX", "brand":"YYYY", "discount": {} }
 {"city":"XXXXXX", "brand":"YYYY", "discount": {"name": "Freedom", "value": 100} }
 {"city":"XXXXXX", "brand":"YYYY", "discount": {"name": "Festive Sale", "value": 100} }

我尝试了以下Shemas,但它们不起作用:

    { "type":"record", "name":"simple_avro", 
      "fields":[ { "name":"city", "type":"string" }, 
                 { "name":"brand", "type":"string" }, 
                 { "name":"discount",
                   "type":{ "type":"record", "name":"discount", "default":"",  
                     "fields":[ { "name":"discount_name", "type":"string", "default":"null" }, 
                                { "name":"discount_value", "type":"float", "default":0 } 
                              ] }} 
               ] }

对于折扣字段,我尝试将默认值设置为"[]", "{}", "",但这些都不起作用。

1 个答案:

答案 0 :(得分:0)

在任何情况下,我都不认为允许使用空的{}对象,但是如果您根本不允许任何对象,则必须将其设为a union type,由数组指定类型,默认值位于外部字段而不是记录主体内部

{ "name":"discount",
  "type" : [
    "null", 
    { "type":"record", "name":"discount", "fields": [...] } 
  ], 
  "default" : "null"

总的来说,我发现表达in IDL format

更容易

然后,有效消息可能为{"city":"XXXXXX", "brand":"YYYY"}