【发布时间】: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