0

根据 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 不会抛出错误,如图所示以上。

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

4

1 回答 1

0

这是实现与规范不匹配的情况。一些库可能会实现此检查,因此即使您使用的特定库没有检查它,最好确保您的架构与规范匹配。

于 2021-06-25T12:31:51.980 回答