Разрешение enum быть нулевым в схеме Avro

В моей схеме 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}, он работает. Как сделать поле перечисления необязательным?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
3
0
2 952
1

Ответы 1

Для кодировки Avro JSON вам необходимо передать предполагаемый тип для каждого ненулевого значения объединения.

{"myenum": {"string": "HEARTS"}}

должен сделать трюк за вас.

Я тоже пробовал это после прочтения эта почта. Однако когда я это делаю, я получаю сообщение об ошибке: Unknown union branch string.

Warren Crasta 08.10.2018 19:48

Вы включили пространство имен?

Giorgos Myrianthous 08.10.2018 19:52

Я не сделал этого, и я подозреваю, что в этом проблема. Я пытаюсь осмыслить пространства имен. Если у меня есть схема, определенная как эта почта, чтобы включить пространство имен, как вы предложили, мне нужно изменить кодировку JSON объекта или саму схему?

Warren Crasta 08.10.2018 20:02

@WarrenCrasta Посмотрите мой обновленный ответ и дайте мне знать, сработало ли это для вас.

Giorgos Myrianthous 08.10.2018 20:09

Пытался и получаю ошибку: 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.

Warren Crasta 08.10.2018 20:17

Могу ли я изменить кодировку JSON на эту? { "com.abc.Suit": { "myenum": { "string": "HEARTS" } } }

Warren Crasta 08.10.2018 20:21

@WarrenCrasta Вы пробовали? Это может сработать для вашей исходной схемы.

Giorgos Myrianthous 08.10.2018 20:23

Я пробовал изменить кодировку JSON. У меня ошибка Expected start-union. Got END_OBJECT. Ну что ж, спасибо за вашу помощь. Думаю, мне придется больше возиться с этим, но я также думаю, что это проблема с пространством имен.

Warren Crasta 08.10.2018 20:25

Другие вопросы по теме