Ошибка схемы Avro, когда в записи отсутствует поле

Я использую процессор NiFi (v1.2) ConvertJSONToAvro. Я не могу проанализировать запись, которая содержит только 1 из 2 элементов типа "запись". Этот элемент также может полностью отсутствовать в данных. Моя схема Avro неверна?

Фрагмент схемы:

"name": "personname",
"type": [
  "null":,
  {
    "type": "record",
    "name": "firstandorlast",
    "fields": [
        {
          "name": "first",
          "type": [
            "null",
            "string"
          ]
        },
        {
          "name": "last",
          "type": [
            "null",
            "string"
          ]
        }
      ]
  }
] 

Если "personname" содержит как "first", так и "last", это работает, но если оно содержит только один из элементов, произойдет сбой с ошибкой: Невозможно преобразовать поле personname: не удалось разрешить union: {"last":"Smith"} не в "type": [ "null":, { "type": "record", "name": "firstandorlast", "fields": [ { "name": "first", "type": [ "null", "string" ] }, { "name": "last", "type": [ "null", "string" ] } ] } ]

1 ответ

Решение

Вам не хватает значения по умолчанию

https://avro.apache.org/docs/1.8.1/spec.html

Ваша схема должна выглядеть так

"name": "personname",
"type": [
  "null":,
  {
    "type": "record",
    "name": "firstandorlast",
    "fields": [
        {
          "name": "first",
          "type": [
            "null",
            "string"
          ],
          "default": "null"
        },
        {
          "name": "last",
          "type": [
            "null",
            "string"
          ],
          "default": "null"
        }
      ]
  }
] 
Другие вопросы по тегам