我正在尝试将类型设置为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"
}
]
}
]