【问题标题】:How to set type to “record” and “null” at once in Avro Schema?如何在 Avro Schema 中同时将类型设置为“记录”和“空”?
【发布时间】:2020-06-24 05:24:31
【问题描述】:

我正在尝试同时将类型设置为记录和空。我不知道这是否可能。 这是我的输入 json

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

现在我正在使用 Nifi 创建 Avroschema,

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

现在我将使用 java 代码验证此架构并输入 json。它带来成功。但问题是我不能将请求标签设为空并同时记录。为此,我举了另一个例子。

Avro Schema. How to set type to "record" and "null" at once

我修改了我的 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"}]}}

我需要解决这个问题。

【问题讨论】:

    标签: json null apache-nifi avro avro-tools


    【解决方案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"
                   }
                ]
             }
          }
       ]
    }
    

    我用来将其设为 Null 的架构中存在错误。我现在认识到了这个错误。

     "type":[
                "null",
                {
                   "type":"record",
                   "name":"request",
                   "fields":[
                         {
                            "name":"reqNo",
                            "type":"null"
                         }
                      ]
                }
             ]
    

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 2019-05-05
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多