我正在使用官方avro库为python编写一个python程序,版本为1.8.2。
这是一个简单的架构来显示我的问题:
{
"type": "record",
"namespace": "com.example",
"name": "NameUnion",
"fields": [
{
"name": "name",
"type": [
{
"type": "record",
"namespace": "com.example",
"name": "FullName",
"fields": [
{
"name": "first",
"type": "string"
},
{
"name": "last",
"type": "string"
}
]
},
{
"type": "record",
"namespace": "com.example",
"name": "ConcatenatedFullName",
"fields": [
{
"name": "entireName",
"type": "string"
}
]
}
]
}
]
}
此架构的可能基准是{"name": {"first": "Hakuna", "last": "Matata"}}
和{"name": {"entireName": "Hakuna Matata"}}
。
然而,这给出了歧义的余地,因为并非总是avro能够检测到联合中指定的正确模式。在这种情况下,任一数据都将对应于1且只有1个有效模式,但可能存在联合中多于1个模式有效的情况。
我想知道是否可以使用像{"name": {"FullName": {"first": "Hakuna", "last": "Matata"}}}
这样的基准,其中在基准中指定了特定的联合模式名称。
有可能吗?怎么做?
答案 0 :(得分:1)
经过大量研究后,我发现包含类型信息的表示是Avro JSON encoding standard。
在我撰写本文时,不幸的是官方python库和fastavro都不支持。