Проверка схемы Avro

Согласно спецификации Avro Schema (для союзов): https://avro.apache.org/docs/current/spec.html

Союзы, как упоминалось выше, представляются с помощью массивов JSON. Например, [null, string] объявляет схему, которая может быть нулевой или строковой.

(

Обратите внимание, что если для поля записи, тип которого является объединением, указано значение по умолчанию, тип значения по умолчанию должен соответствовать первому элементу объединения.

Таким образом, для объединений, содержащих значение NULL, значение NULL обычно указывается первым, поскольку значение по умолчанию для таких объединений обычно равно NULL.)

Из стандарта следует, что при объявлении союзов первое слово должно быть значением по умолчанию, а второе — типом данных.

В нашем продукте мы используем кодировку Avro со следующей схемой:

{
      "name": "data",
      "type": {
        "name": "data",
        "type": "record",
        "fields": [
          {
            "name": "data_asset",
            "type": ["string", "null"],
            "default": null,
            "doc": "The serialized JSON describing the entity - can be null for special cases"
          }
        ]
      }
    }

Что мы обнаружили, так это то, что, хотя у Unions есть ОБЯЗАТЕЛЬНОЕ требование, чтобы первый элемент был значением по умолчанию, валидатор Schema не выдает никаких ошибок, когда мы меняем порядок ([string, null]), как показано выше.

У меня есть вопрос: почему проверка проходит, даже если она неверна по стандарту?


person Ashvin Lakshmikantha    schedule 25.06.2021    source источник


Ответы (1)


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

person Scott    schedule 25.06.2021