значение по умолчанию avro для логического значения не применяется - PullRequest
0 голосов
/ 19 марта 2020

У меня есть эта схема avro, в которой capture объявлен как логическое значение, и я хотел задать значение по умолчанию как true.

{
    "namespace": "abc",
    "type": "record",
    "name": "Request",
    "fields": [
        {
            "name": "amount",
            "type": "long",
        },
        {
            "name": "currency",
            "type": ["string", "null"],
        },
        {
            "name": "capture",
            "type": "boolean",
            "default": true
        } 
}

Когда это используется в Java, он получает значение по умолчанию null. Что мне нужно сделать, чтобы установить значение по умолчанию true?

1 Ответ

1 голос
/ 20 марта 2020

Это не просто относится к Java. В целом (согласно документации, доступной по адресу https://avro.apache.org/docs/current/spec.html), мы имеем:

default: A default value for this field, used when reading instances that lack this field (optional)

Таким образом, значение по умолчанию используется только при эволюции схемы и поэтому, когда вы читаете / пишете записи, используя разные схемы. Например, предположим, что вы хотите прочитать запись, написанную со схемой A1, используя вместо этого развитую схему A2, и что поле capture было введено со схемой A2 (поэтому ее не было в схеме A1). Таким образом, запись, которую вы читаете, содержит значение по умолчанию схемы A2 для этой переменной.


Для проверки я создал два Java класса из схемы соответственно с логическим значением поле со значением по умолчанию "true" и "false". Сгенерированные классы идентичны за исключением определения схемы Avro. Это подтверждает, что значение по умолчанию не отражено в исходном коде.

Я также пытался с Golang, и результат тот же.

...