根据 Avro Schema 规范(用于联合):https ://avro.apache.org/docs/current/spec.html
联合,如上所述,联合使用 JSON 数组表示。例如,["null", "string"] 声明一个模式,它可以是 null 也可以是字符串。
(
请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。
因此,对于包含“null”的联合,通常首先列出“null”,因为此类联合的默认值通常为 null。)
从标准来看,在声明联合时,第一个字必须是默认值,第二个字必须是数据类型。
在我们的产品中,我们使用具有以下 Schema 的 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 有一个“必须”要求第一项是默认值,但当我们颠倒顺序 (["string", "null"]) 时,Schema-validator 不会抛出错误,如图所示以上。
我的问题是:为什么验证通过,即使按照标准它是“不正确的”?