Как установить тип «запись» и «нуль» одновременно в схеме Avro?

Я пытаюсь установить тип для записи и нуля одновременно. Я не знаю, возможно ли это. Вот мой ввод json

{
   "request":{
      "reqNo": null
   },
   "dataset":{
      "id":"1",
      "value":"sample"
   }
}

И теперь я создаю Авросхему с помощью Nifi,

GenerateFlowFile -->> InferAvroSchema -->> AttributeToJson

Я получу соответствующую схему

{
   "type":"record",
   "name":"one",
   "namespace":"com.sixdee",
   "fields":[
      {
         "name":"request",
         "type":{
            "type":"record",
            "name":"request",
            "namespace":"",
            "fields":[
               {
                  "name":"reqNo",
                  "type":"null"
               }
            ]
         }
      },
      {
         "name":"dataset",
         "type":{
            "type":"record",
            "name":"dataset",
            "namespace":"",
            "fields":[
               {
                  "name":"id",
                  "type":"string"
               },
               {
                  "name":"value",
                  "type":"string"
               }
            ]
         }
      }
   ]
}

и теперь я проверю эту схему и введу json, используя код Java. Это дает успех. Но проблема в том, что я не могу сделать тег запроса нулевым и записать его одновременно. Для этого я сослался на другой пример.

Схема Avro. Как установить тип для записи и null одновременно

И я изменил свою схему Avro, чтобы соответствовать моему требованию установить для типа значение null и записать сразу.

Модифицированная схема Avro:

{
   "type":"record",
   "name":"one",
   "namespace":"com.sixdee",
   "fields":[
      {
         "name":"request",
         "type":   [
     "null", {
               "type":{
                  "type":"record",
                  "name":"request",
                  "fields":[
                     {
                        "name":"reqNo",
                        "type":"null"
                     }
                  ]
               }
          }
]
      },
      {
         "name":"dataset",
         "type":{
            "type":"record",
            "name":"dataset",
            "namespace":"",
            "fields":[
               {
                  "name":"id",
                  "type":"string"
               },
               {
                  "name":"value",
                  "type":"string"
               }
            ]
         }
      }
   ]
}

Но при проверке этой схемы с моим входным json она терпит неудачу. И я получаю исключение вроде этого.

org.apache.avro.SchemaParseException: No type: {"type":{"type":"record","name":"request","fields":[{"name":"reqNo","type":"null"}]}}

Мне нужно решение этой проблемы.


person Bruce wayne - The Geek Killer    schedule 12.03.2020    source источник


Ответы (1)


Модифицированная схема Avro

{
   "type":"record",
   "name":"one",
   "namespace":"com.sixdee",
   "fields":[
      {
         "name":"request",
         "type":[
            "null",
            {
               "type":"record",
               "name":"request",
               "fields":[
                     {
                        "name":"reqNo",
                        "type":"null"
                     }
                  ]
            }
         ]
      },
      {
         "name":"dataset",
         "type":{
            "type":"record",
            "name":"dataset",
            "namespace":"",
            "fields":[
               {
                  "name":"id",
                  "type":"string"
               },
               {
                  "name":"value",
                  "type":"string"
               }
            ]
         }
      }
   ]
}

В схеме была ошибка, которую я использовал, чтобы сделать ее нулевой. Я узнал эту ошибку сейчас.

 "type":[
            "null",
            {
               "type":"record",
               "name":"request",
               "fields":[
                     {
                        "name":"reqNo",
                        "type":"null"
                     }
                  ]
            }
         ]
person Bruce wayne - The Geek Killer    schedule 12.03.2020