【发布时间】:2017-04-12 18:41:46
【问题描述】:
根据this question关于嵌套 Avro 模式,嵌套记录模式的正确方法如下:
{
"name": "person",
"type": "record",
"fields": [
{"name": "firstname", "type": "string"},
{"name": "lastname", "type": "string"},
{
"name": "address",
"type": {
"type" : "record",
"name" : "AddressUSRecord",
"fields" : [
{"name": "streetaddress", "type": "string"},
{"name": "city", "type": "string"}
]
},
}
]
}
我不喜欢给字段命名为 address 并且不得不为字段的架构提供不同的名称 (AddressUSRecord)。我可以为字段和架构提供相同的名称address吗?
如果我想在多个其他模式中使用AddressUSRecord 模式,而不仅仅是person,该怎么办?如果我想在另一个架构中使用AddressUSRecord,比如说business,我是否必须将其命名为其他名称?
理想情况下,我想在单独的架构中定义AddressUSRecord,然后让address 的类型引用AddressUSRecord。但是,尚不清楚 Avro 1.8.1 是否支持这种开箱即用。这个2014 article 表明需要使用自定义代码处理子模式。在 Avro 1.8.1 中定义可重用模式的最佳方法是什么?
注意:我想要一个可以与 Confluent Inc. 的 Schema Registry 配合使用的解决方案。有一个Google Groups thread 似乎表明架构注册表不能很好地处理架构引用。
【问题讨论】: