Подтвердить что ты не робот

Значения по умолчанию для поля Avro

У меня возникают проблемы с настройкой значений по умолчанию для полей avro. У меня есть простая схема, как показано ниже:

data.avsc:

{
 "namespace":"test",
 "type":"record",
 "name":"Data",
 "fields":[
    { "name": "id", "type": [ "long", "null" ] },
    { "name": "value", "type": [ "string", "null" ] },
    { "name": "raw", "type": [ "bytes", "null" ] }
 ]
}

Я использую avro-maven-plugin v1.7.6 для создания Java-модели.

Когда я создаю экземпляр модели, используя

Data data = Data.newBuilder().build();, он выходит из строя с исключением org.apache.avro.AvroRuntimeException: org.apache.avro.AvroRuntimeException: Тип идентификатора поля: UNION pos: 0 не установлен и не имеет значения по умолчанию.

Но если я укажу свойство "default",

{ "name": "id", "type": [ "long", "null" ], "default": "null" },

Я не получаю эту ошибку. Я прочитал в документации, что первая схема в объединении становится стандартной схемой. Поэтому мой вопрос: почему мне все еще нужно указать свойство "default"? Как еще сделать поле необязательным?

И если мне нужно указать значения по умолчанию, как это работает для объединения; мне нужно указать значения по умолчанию для каждой схемы в объединении и как это работает в терминах порядка/синтаксиса?

Спасибо.

4b9b3361

Ответ 1

Значение по умолчанию для объединения соответствует первой схеме объединения (Source). Ваш союз определяется как ["long", "null"], поэтому значение по умолчанию должно быть длинным. null не является длинным числом, поэтому вы получаете сообщение об ошибке.

Если вы все еще хотите определить null как значение по умолчанию, сначала поставьте нулевую схему, т.е. замените союз на ["null", "long"].

Ответ 2

Его ошибка на конце Avro, которая отмечена как Not A Problem. Вам нужно добавить атрибут по умолчанию, чтобы указать значение по умолчанию.

{"name": "xxx", "type": ["null", "boolean"], "default": null}

Пожалуйста, обратитесь AVRO-1803.