包含多个阵列的Avro工会



我正在尝试在我们的软件中使用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脚,所以我必须找到一个肮脏的工作。

最新更新