根据 Avro Schema 规范(针对联合):https://avro.apache.org/docs/current/spec.html
工会 如上所述,联合使用 JSON 数组表示。例如,["null", "string"] 声明了一个可以是空值或字符串的模式。
(
请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。
因此,对于包含“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"
}
]
}
}
我们发现,虽然联合有一个“必须”的要求,即第一项是默认值,但当我们颠倒顺序时,模式验证器不会抛出错误 (["string", "null"] ) 如上所示。
我的问题是: 为什么验证通过,即使按照标准“不正确”?
答案 0 :(得分:0)
这是一种实现与规范不匹配的情况。某些库可能会执行此检查,因此最好确保您的架构与规范匹配,即使您使用的特定库未对其进行检查。