什么是Union类型的null或UUID的正确Avro模式

时间:2019-11-21 11:03:03

标签: avro

我正在尝试为可选的可空GUID定义Avro模式。将逻辑类型作为这样的联合类型的一部分正确吗?

我已经looked in the docs,并且找不到该用例的示例

{
  "name": "MyMessageType",
  "type": "record",
  "namespace": "com.mycompany.kafka.records",
  "fields": [
    {
      "name": "userId",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "default": null,
    },
    { ... more fields ... }
  ]
}

1 个答案:

答案 0 :(得分:1)

正确的方法如您所写,逻辑类型是类型定义的一部分,而不是联合定义的一部分。

例如 正确的方法:

  "type": [
    "null",
    {
      "type": "string",
      "logicalType": "uuid" //Logical type is part of the 'string' type definition
    }
  ],

,而不是联合定义的一部分。

例如错误的方式

  "logicalType": "uuid" //Wrong way - Logical type is NOT part of the 'union' type definition
  "type": [
    "null",
    {
      "type": "string",
    }
  ],

顺便说一句,您可以拥有定义几种不同逻辑类型的并集,这可能就是为什么逻辑类型是并集分支的一部分而不是整个并集的一部分的原因。