我正在尝试在我们的软件中使用C AVRO库,并且我遇到了一个重要的障碍。我有一个包裹一系列类型的"价值"类,我想使用Avro来读/编写。这不仅包括简单类型,还包括类型,任意类等的vectors。
我正在尝试为我的"值"类指定AVRO模式。在我的示例中
我的架构是一个带有两个字段的记录,一个字段标识包含类型,并且一个可以容纳包含对象的联合。我拥有的模式是以下...
{
"type": "record",
"name": "Value",
"fields": [
{
"name": "ilk",
"type": "string"
},
{
"name": "contents",
"type": [
"null",
"boolean",
"int",
{
"type": "array",
"items": "int"
},
"long",
{
"type": "array",
"items": "long"
}
]
}
]
}
我没有指定JSON,而是构建一个打印出上述内容的AVRO C 架构层次结构。验证该模式层次结构失败。通过C 代码嗅探它可以阻止您在联合中拥有多个数组或地图,即使数组或地图中的类型不同。
这实际上是AVRO标准的一部分,还是C 实现中的错误?我得到的是两次指定相同类型的事情是一件愚蠢的事情,但是我不认为允许使用具有不同类型的数组和地图。
我实际上不认为这是您想要的。您想要的是创建一个具有不同类型的数组。这样。
{
"namespace": "example.avro",
"type": "record",
"name": "Example",
"fields": [
{
"name": "values",
"type":
{
"type": "array",
"items": ["int", "string"]
}
}
]
}
这将创建一个可以具有两种简单类型的数组。" int"或" string"。您可以在其中弹出任何复杂类型。
在标准中找到了我的答案。您不能在工会内有一个以上的数组或地图。
对我来说听起来有些la脚,所以我必须找到一个肮脏的工作。