Как указать значение по умолчанию для перечисления с помощью avro IDL?

Я не нашел ничего в документации по этому поводу, только общие сведения о значениях по умолчанию. Я предположил, что это должно работать так:

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}

GenericDatumReader в Java, к сожалению, жалуется, что он находит строку, но ожидает MyEnum.

Кто-нибудь может подтвердить, что это правильный способ использовать enum со значением по умолчанию, используя avro IDL? В этом случае у меня есть ошибка в другом месте. Кто-нибудь может подтвердить, что это не способ сделать это и исправить меня? Любой вклад приветствуется!

Обновление: в моей реальной версии этого, кажется, что недавно добавленное перечисление к записи вызывает проблему, даже если у нее есть значение по умолчанию. Это означает, что моя схема читателя ожидает перечисление, тогда как запись не содержит его. Схема эволюции должна быть способна решить эту проблему, но, похоже, не удалась. Более подробно: я работаю с Pig здесь, а не с прямой Java.

2 ответа

Решение

Хорошо, оказывается, это действительно правильный способ указать значение по умолчанию для перечисления в avro IDL. В моем случае объединение {null, string} было заменено перечислением, вызывающим все проблемы. Поэтому помните: не меняйте тип поля в avro!

Я не знаю avro IDL, но если вы уверены в синтаксисе 'record`, вы можете использовать этот код для преобразования вашей String в тип enum

MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED")
Другие вопросы по тегам