记录缺少字段时出现 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"
        }
      ]
  }
]