具有默认对象数组的 AVRO 模式

AVRO schema with default array of objects

我有一个带有数组字段的 AVRO 模式。这个数组字段中的项目是另一个 AVRO 模式的对象。下面是我现在的代码。

{
  "name": "bars",
  "type": ["null", {
    "type": "array",
    "items": "com.example.Bar"
  }],
  "default": null
}

此代码是“bars”的字段定义,它是一个包含“com.example.Bar”个对象的数组。

我现在将默认值设置为“null”,但是我想明确地将默认值设置为 3 个 Bar 对象的数组。

假设我的 Bar 具有以下字段定义

{
  "name": "name",
  "type": [
    "null",
    "string"
  ],
  "default": null
},
{
  "name": "number",
  "type": [
    "null",
    "int"
  ],
  "default": null
}

我想将“条形图”默认设置为

{
  "name": "bars",
  "type": ["null", {
    "type": "array",
    "items": "com.example.Bar"
  }],
  "default": [{"name": "bar1", "number":1}, {"name": "bar2", "number":2}, {"name": "bar3", "number":3}]
}

但是这段代码不起作用。我应该如何设置对象的默认值?

联合字段的默认值对应于first schema in the union。如果默认值是一个数组,那么数组架构应该是联合中的第一个架构。

"type": [
  {
    "type": "array",
    "items": "com.example.Bar"
  },
  "null"
],

问题是我允许“null”作为数组字段的类型。我想如果我想 pre-populate 具有值的默认字段,我不能允许 null。

所以下面的代码解决了这个问题。

{
  "name": "bars",
  "type": {
    "type": "array",
    "items": "com.example.Bar"
  },
  "default": [{"name": "bar1", "number":1}, {"name": "bar2", "number":2}, {"name": "bar3", "number":3}]
}