我对 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 的任何初学者资源也将不胜感激。
谢谢你。