Avro 中的可空数组字段
Nullable Array Fields in Avro
我有以下 JSON 数据集:
{
"hashtags":null
}
{
"hashtags":[
"value1",
"value2"
]
}
以及从 Kite SDK 生成的以下 Avro 架构(看起来正确 - 空值或字符串数组的并集):
{
"type" : "record",
"name" : "tweet",
"fields" : [ {
"name" : "hashtags",
"type" : [ "null", {
"type" : "array",
"items" : "string"
} ],
"doc" : "Type inferred from 'null'"
} ]
}
当我尝试使用
来隐藏数据时
avro-tools fromjson --schema-file tweet.avsc twitter.json > twitter.avro
我收到以下错误(为简洁起见进行了删减):
Exception in thread "main" org.apache.avro.AvroTypeException: Expected start-union. Got START_ARRAY
将 null 大小写更改为空数组:
{ "hashtags":null } to { "hashtags":[] }
架构更改为允许项目字段中的字符串或空值
"type" : {
"type" : "array",
"items" : [ "null", "string" ]
}
正常工作,一旦输入 JSON 中的字符串符合 'strings'。
因此,是否可以有一个可为空的数组字段,或者,从 Avro 的角度来看,是否可以使用空数组处理可空性?
只要您的模式中有联合,就必须明确告诉 Avro 将数据解释为什么类型。或者像你所做的那样预处理你的数据,这样你就不需要联合了。按照你现在的方式,你会发现使用
"type" : {
"type" : "array",
"items" : "string"
}
也有效,因为您已将所有数据强制转换为数组类型。不需要 null。
我有以下 JSON 数据集:
{
"hashtags":null
}
{
"hashtags":[
"value1",
"value2"
]
}
以及从 Kite SDK 生成的以下 Avro 架构(看起来正确 - 空值或字符串数组的并集):
{
"type" : "record",
"name" : "tweet",
"fields" : [ {
"name" : "hashtags",
"type" : [ "null", {
"type" : "array",
"items" : "string"
} ],
"doc" : "Type inferred from 'null'"
} ]
}
当我尝试使用
来隐藏数据时avro-tools fromjson --schema-file tweet.avsc twitter.json > twitter.avro
我收到以下错误(为简洁起见进行了删减):
Exception in thread "main" org.apache.avro.AvroTypeException: Expected start-union. Got START_ARRAY
将 null 大小写更改为空数组:
{ "hashtags":null } to { "hashtags":[] }
架构更改为允许项目字段中的字符串或空值
"type" : {
"type" : "array",
"items" : [ "null", "string" ]
}
正常工作,一旦输入 JSON 中的字符串符合 'strings'。
因此,是否可以有一个可为空的数组字段,或者,从 Avro 的角度来看,是否可以使用空数组处理可空性?
只要您的模式中有联合,就必须明确告诉 Avro 将数据解释为什么类型。或者像你所做的那样预处理你的数据,这样你就不需要联合了。按照你现在的方式,你会发现使用
"type" : {
"type" : "array",
"items" : "string"
}
也有效,因为您已将所有数据强制转换为数组类型。不需要 null。