В моей схеме Avro у меня есть поле под названием myenum типа enum, как показано ниже:
{
"name": "myenum",
"type": {
"type": "enum",
"name": "Suit",
"symbols": ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
}
}
Я тоже хочу, чтобы null был разрешен. Если я изменю тип на объединение со значением по умолчанию как null (как предлагается в эта почта), это будет выглядеть так:
{
"name": "myenum",
"type": ["null", {
"type": "enum",
"name": "Suit",
"symbols": ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
}]
}
Когда я тестирую его со следующим объектом JSON {"myenum":"HEARTS"}, я получаю сообщение об ошибке - Expected start-union. Got VALUE_STRING.
Если я тестирую его с нулевым значением {"myenum": null}, он работает. Как сделать поле перечисления необязательным?

Для кодировки Avro JSON вам необходимо передать предполагаемый тип для каждого ненулевого значения объединения.
{"myenum": {"string": "HEARTS"}}
должен сделать трюк за вас.
Вы включили пространство имен?
Я не сделал этого, и я подозреваю, что в этом проблема. Я пытаюсь осмыслить пространства имен. Если у меня есть схема, определенная как эта почта, чтобы включить пространство имен, как вы предложили, мне нужно изменить кодировку JSON объекта или саму схему?
@WarrenCrasta Посмотрите мой обновленный ответ и дайте мне знать, сработало ли это для вас.
Пытался и получаю ошибку: org.apache.avro.SchemaParseException: "record" is not a defined name. The type of the "Test" field must be a defined name or a {"type": ...} expression.
Могу ли я изменить кодировку JSON на эту? { "com.abc.Suit": { "myenum": { "string": "HEARTS" } } }
@WarrenCrasta Вы пробовали? Это может сработать для вашей исходной схемы.
Я пробовал изменить кодировку JSON. У меня ошибка Expected start-union. Got END_OBJECT. Ну что ж, спасибо за вашу помощь. Думаю, мне придется больше возиться с этим, но я также думаю, что это проблема с пространством имен.
Я тоже пробовал это после прочтения эта почта. Однако когда я это делаю, я получаю сообщение об ошибке:
Unknown union branch string.