Apache Avro 联合​​类型

Apache Avro Union type

我正在使用 Avro 1.11.0 库使用 Python 3.7 将数据写入 Avro 文件。我对 Avro 的联合类型有一些疑问。请在下面找到两个架构。

{
    "name" : "name",
    "type" : ["null", "string"],
    "columnName" : "name",
}

{
    "name" : "name",
    "type" : ["string", "null"],
    "columnName" : "name",
}

第一个模式包含联合类型 "type" : ["null", "string"],第二个模式包含联合类型 "type" : ["string", "null"]。 那么上述模式有什么区别吗?

唯一不同的是,规范声明如果要使用默认值,它应该对应联合中的第一个类型。

例如,这些是有效的:

{
    "name" : "name",
    "type" : ["null", "string"],
    "columnName" : "name",
    "default": null,
}

{
    "name" : "name",
    "type" : ["string", "null"],
    "columnName" : "name",
    "default": "foo",
}

但这些不会:

{
    "name" : "name",
    "type" : ["null", "string"],
    "columnName" : "name",
    "default": "foo",
}

{
    "name" : "name",
    "type" : ["string", "null"],
    "columnName" : "name",
    "default": null,
}

由于包含 null 的联合往往意味着类似于可选字段,因此大多数人会将 null 作为联合中的第一个选项,以便他们可以将默认值设置为 null。