包含多个阵列的Avro工会
Avro unions containing multiple arrays
我正在尝试在我们的软件中使用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脚,所以我必须找到一个肮脏的工作。
相关文章:
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 工会成员的析构函数似乎是自动调用的
- 工会与大小混淆
- 使用只有一个成员的工会的目的是什么?
- 在这种情况下,工会成员会调用自己的析构函数吗
- C++工会会员的一生
- C工会和C++工会有什么区别?
- 怎么能用memcpy复制工会简单的成员?
- 为什么在std::optional的某些实现中有一个虚拟工会成员?
- 工会成员中的模板 - 声明没有声明任何内容
- 直接向工会而不是其特定成员之一发送memcpy数据是否安全
- 对非活跃的工会成员使用"std::addressof"是否定义明确
- 铸造结构指针指向C 的工会指针
- 获取工会成员的数量
- 写信给工会,与海湾合作委员会
- 使用 std::launder 从指向非活动工会成员的指针获取指向活动工会成员的指针?
- 可以使用工会将字符阵列转换为浮动
- FlatBuffers:未支撑的工会向量错误将JSON文件转换为二进制文件
- 编码的 avro 消息的大小,而不对其进行编码
- 包含多个阵列的Avro工会