0

我正在尝试将类型设置为同时记录和空。我不知道这是否可能。这是我的输入 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 架构。如何一次将类型设置为“记录”和“空”

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

我需要解决这个问题。

4

1 回答 1

0

修改后的 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"
                     }
                  ]
            }
         ]
于 2020-03-12T08:00:31.027 回答