Avro разрешает пустой JSON / хэш для вложенных атрибутов - PullRequest
0 голосов
/ 19 ноября 2018

Для этого нужно создать схему 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} }

Я пробовал использовать следующие схемы, которые не работают:

    { "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 голосов
/ 23 ноября 2018

Я не думаю, что пустой {} объект разрешен в любом случае, но если вы хотите вообще не разрешать объект, тогда он должен быть типом объединения , как обозначеномассив для типа, значение по умолчанию идет во внешнем поле, а не внутри тела записи

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

В общем, я считаю, что проще выразить в формате IDL

Тогда допустимое сообщение может быть {"city":"XXXXXX", "brand":"YYYY"}

...