avro AVSC (json) 文件数组或模式重用

avro AVSC (json) file array or schema re-use

这与一个被问过无数次但我找不到明确答案的问题有关。

在用于定义 avro 模式的 AVSC (json) 语法中,没有 'import' 功能。所以似乎没有明确的方法来定义模式并在别处引用它。 (我知道 AVDL 支持 import 但 java 解析器还不允许 uuid 类型,尽管它已修补并将在 1.11 中修复)

我看到很多 'how to re-use schemas' 的答案都依赖于使用 avro maven plugin 来定义 'includes',如果您使用 java,这很好,但我我在多语言环境中工作。

我在 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 插件的一个怪癖?

我特别希望解决的问题:

but is this actually supported or just a quirk of the maven avro plugin?

这是 combining/referencing 模式的完全有效方式。事实上,在 python fastavro 库中 there is a load_schema API 最初基本上就是这样做的;它会将所有模式加载到一个列表 (Avro Union) 中,因为这是解决问题的正确且简单的方法。

至于 must interoperate with Confluent Schema Registry,我不知道架构注册表是如何工作的,也不知道它是否支持这种类型的联合架构,但希望它应该支持,因为架构是有效的。