如何指定avro union类型的数据而没有歧义?

时间:2018-04-25 11:14:35

标签: python avro

我正在使用官方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"}}}这样的基准,其中在基准中指定了特定的联合模式名称。

有可能吗?怎么做?

1 个答案:

答案 0 :(得分:1)

经过大量研究后,我发现包含类型信息的表示是Avro JSON encoding standard

在我撰写本文时,不幸的是官方python库和fastavro都不支持。