0

我对 Avro 序列化完全陌生,我试图弄清楚复杂类型是如何定义的。

我对 Avro 如何在 Java 中生成枚举感到困惑。

{
    "type":"record",
    "namespace":"com.example",
    "name": "Customer",
    "doc":"Avro Schema for our Customer",
    "fields":[
      {"name":"first_name","type":"string","doc":"First Name of Customer"},
      {"name":"last_name","type":"string","doc":"Last Name of Customer"},
      {"name":"automated_email","type":"boolean","doc":"true if the user wants marketing email", "default":true},
      {
        "name": "customer_type",
        "type": ["null",
          {
            "name": "Customertype",
            "type": "enum",
            "symbols": ["OLD","NEW"]
          }
        ]
      }
    ]
  }

注意该customer_type字段。如果我给出null,那么在我生成的源中,我会得到正确的Enum类型:

private com.example.Customertype customer_type;

但是当我删除null值并customer_type以下列方式定义时:

{
        "name": "customer_type",
        "type": [
          {
            "name": "Customertype",
            "type": "enum",
            "symbols": ["OLD","NEW"]
          }
        ]
      }

声明更改为:

private Object customer_type;

那个“null”字符串是什么意思?它为什么如此重要 ?

我已经尝试过浏览 AVRO 规范,但没有什么给我一个明确的答案,为什么它是这样工作的。

我正在使用AVRO Maven 插件。

AVRO 的任何初学者资源也将不胜感激。

谢谢你。

4

1 回答 1

0

如果要删除null,则应删除[and]括号(因为它不再是联合)。

所以你的customer_type架构应该是这样的:

{
        "name": "customer_type",
        "type": {
          "name": "Customertype",
          "type": "enum",
          "symbols": ["OLD","NEW"]
        }
      }
于 2021-09-09T13:34:21.317 回答