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。
我正在使用 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。