Как установить тип «запись» и «ноль» одновременно в Avro Schema? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь установить тип для записи и null одновременно. Я не знаю, возможно ли это. Вот мой ввод 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 код. Это дает успех. Но проблема в том, что я не могу сделать тег Request пустым и записать одновременно. Для этого я привел еще один пример.

Avro Schema. Как установить type для «record» и «null» одновременно

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

Modified Avro Schema:

{
   "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"}]}}

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

1 Ответ

0 голосов
/ 12 марта 2020

Модифицированная схема 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"
                     }
                  ]
            }
         ]
...