【发布时间】:2021-06-25 03:33:20
【问题描述】:
根据 Avro Schema 规范(用于联合):https://avro.apache.org/docs/current/spec.html
工会 如上所述,联合使用 JSON 数组表示。例如,["null", "string"] 声明一个可以是 null 或字符串的模式。
(
请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。
因此,对于包含“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-validator 不会抛出任何错误 (["string", "null"] ) 如上所示。
我的问题是: 为什么验证通过了,即使按照标准它是“不正确的”?
【问题讨论】:
标签: python-3.x avro avro-tools