如何在Avro Schema中将类型同时设置为"record"和"null"



我正在尝试将类型设置为record和null。我不知道这是否可能。这是我输入的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。它带来了成功。但问题是,我不能将Request标记设为null并同时进行记录。为此,我引用了另一个例子。

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

我需要一个解决这个问题的办法。

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

相关内容

  • 没有找到相关文章

最新更新