记录缺少字段时出现 Avro 模式问题
Avro schema issue when record missing a field
我正在使用 NiFi (v1.2) 处理器 ConvertJSONToAvro。我无法解析仅包含 "record" 类型的 2 个元素之一的记录。该元素也可以从数据中完全缺失。我的 Avro 模式不正确吗?
架构片段:
"name": "personname",
"type": [
"null":,
{
"type": "record",
"name": "firstandorlast",
"fields": [
{
"name": "first",
"type": [
"null",
"string"
]
},
{
"name": "last",
"type": [
"null",
"string"
]
}
]
}
]
如果 "personname" 同时包含 "first" 和 "last" 它可以工作,但如果它只包含其中一个元素,它将失败并出现错误:无法转换字段人名:无法解析union: {"last":"Smith"} 不在 "type": [ "null":, { "type": "record", "name": "firstandorlast", "fields": [ { "name": "first", "type": [ "null", "string" ] }, { "name": "last", "type": [ "null", "string" ] } ] } ]
您缺少默认值
https://avro.apache.org/docs/1.8.1/spec.html#schema_record
您的架构应该如下所示
"name": "personname",
"type": [
"null":,
{
"type": "record",
"name": "firstandorlast",
"fields": [
{
"name": "first",
"type": [
"null",
"string"
],
"default": "null"
},
{
"name": "last",
"type": [
"null",
"string"
],
"default": "null"
}
]
}
]
我正在使用 NiFi (v1.2) 处理器 ConvertJSONToAvro。我无法解析仅包含 "record" 类型的 2 个元素之一的记录。该元素也可以从数据中完全缺失。我的 Avro 模式不正确吗?
架构片段:
"name": "personname",
"type": [
"null":,
{
"type": "record",
"name": "firstandorlast",
"fields": [
{
"name": "first",
"type": [
"null",
"string"
]
},
{
"name": "last",
"type": [
"null",
"string"
]
}
]
}
]
如果 "personname" 同时包含 "first" 和 "last" 它可以工作,但如果它只包含其中一个元素,它将失败并出现错误:无法转换字段人名:无法解析union: {"last":"Smith"} 不在 "type": [ "null":, { "type": "record", "name": "firstandorlast", "fields": [ { "name": "first", "type": [ "null", "string" ] }, { "name": "last", "type": [ "null", "string" ] } ] } ]
您缺少默认值
https://avro.apache.org/docs/1.8.1/spec.html#schema_record
您的架构应该如下所示
"name": "personname",
"type": [
"null":,
{
"type": "record",
"name": "firstandorlast",
"fields": [
{
"name": "first",
"type": [
"null",
"string"
],
"default": "null"
},
{
"name": "last",
"type": [
"null",
"string"
],
"default": "null"
}
]
}
]