AVRO необходимо установить значение для каждого поля - PullRequest
0 голосов
/ 03 октября 2019

У меня есть схема AVRO с кучей элементов. В каждом элементе я предоставляю значение по умолчанию. Но когда я пытаюсь сериализоваться, я получаю исключение, если я пытаюсь не устанавливать какой-либо элемент со значением. Даже если я просто предоставлю пустую строку для элемента, я не получу эти исключения сериализации.

1 Ответ

0 голосов
/ 07 октября 2019

Поле «по умолчанию» в схеме avro используется для случаев эволюции схемы. См. http://avro.apache.org/docs/current/spec.html#Schema+Resolution для своих правил.

Значение по умолчанию не используется при сериализации (записи) данных. Он используется при обессоливании (считывании) avro-данных, которые были созданы с помощью схемы, в которой отсутствует поле.

Например, если у нас есть данные, которые были получены с этой схемой:

{
    "type":"record",
    "name":"Product",
    "fields":[
         {"name":"product_id","type": "long"}
    ]
 } 

и мыхотите прочитать (разрешить), используя расширенную схему, которая также содержит поле product_name, например:

{
    "type":"record",
    "name":"Product",
    "fields":[
        {"name":"product_id","type": "long"},
        {"name":"product_name","type": "string","default":"old product data"},
    ]
} 

Значение по умолчанию будет использоваться для установки значения для поля 'product_name', которое отсутствует в данных. , поскольку данные были записаны с использованием первой схемы.

...