这与一个被问了无数次的问题有关,但我找不到一个明确的答案。
在用于定义avro模式的AVSC (json)语法中,没有“导入”功能。因此,似乎没有明确的方法来定义模式并在其他地方引用它。(我认识到AVDL支持import,但java解析器还不允许uuid类型,尽管这是修补的,并将在1.11中修复)
我看到了许多关于“如何重用模式”的答案,这些方法依赖于使用avro maven plugin来定义“include”--如果您使用java,这是很棒的,但是我是在一个polyglot环境中工作的。
我在一个AVSC文件中玩弄了这个语法,这个文件在maven/java中为我工作,但似乎完全没有文档化:
[
// ^ note: starts with a top-level array
{
// schema 1
"type": "record",
"namespace": "com.mycompany",
"name": "Money",
"fields": [
{
"name": "amount",
"type": {
"type": "bytes",
"logicalType": "decimal",
"scale": 2,
"precision": 19
}
},
{
"name": "currency",
"type": "string",
"doc": "3-character ISO 4217 currency code"
}
]
},
{
// schema 2, references schema 1
"type": "record",
"namespace": "com.mycompany.budgeting"
"name": "BudgetsModified",
"fields": [
{
"name": "id",
"type": {
"type": "string",
"logicalType": "uuid"
}
},
{
"name": "amount",
// re-use
"type": "com.mycompany.Money"
}
]
}
]但是这实际上是支持还是仅仅是maven avro插件的一个怪癖呢?
我特别想解决的问题是:
Money (带有货币的十进制)这样的自定义元组(互操作)。
发布于 2021-03-02 14:31:12
,但这实际上是支持还是仅仅是maven avro插件的一个怪癖呢?
这是组合/引用架构的一种完全有效的方法。实际上,在python fastavro库中,最初只需要这样做;它会将所有模式加载到一个列表(Avro )中,因为这是解决问题的一种正确而简单的方法。
至于must interoperate with Confluent Schema Registry,我不知道模式注册中心是如何工作的,也不知道它是否支持这种类型的联合模式,但希望它能够支持,因为模式是有效的。
https://stackoverflow.com/questions/66441036
复制相似问题