Avro 架构验证

时间:2021-06-25 03:33:20

标签: python-3.x avro avro-tools

根据 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"] ) 如上所示。

我的问题是: 为什么验证通过,即使按照标准“不正确”?

1 个答案:

答案 0 :(得分:0)

这是一种实现与规范不匹配的情况。某些库可能会执行此检查,因此最好确保您的架构与规范匹配,即使您使用的特定库未对其进行检查。