Avro 模式在使用记录类型时获取未定义的类型名称

Avro schema getting undefined type name when using Record type

所以我正在尝试使用此 avro 架构解析对象。

对象就像:

myInfo: {size: 'XL'}

但它的行为就像记录类型实际上并不存在,我得到了一个 undefined type name: data.platform_data.test_service.result.record at Function.Type.forSchema

架构看起来像:

  "avro": {
    "metadata": {
      "loadType": "full",
      "version": "0.1"
    },
    "schema": {
      "name": "data.platform_data.test_service.result",
      "type": "record",
      "fields": [
        {
          "name": "myInfo",
          "type": "record",
          "fields": [{
            "name": "size",
            "type": {"name":"size", "type": "string"}
          }]
      }
      ]
    }
  }

我应该提到我也为此使用 avsc。有人有什么想法吗?我已经尝试了几乎所有组合,但 afaik 解析出这样的对象的唯一方法是使用 record

研究架构,我发现 "type": "record" 是个问题。我将其移至嵌套定义。它奏效了。似乎描述 here 有点令人困惑。

改变 之前:

{
  "name": "myInfo",
  "type": "record",
  "fields": [{
    "name": "size",
    "type": {"name":"size", "type": "string"}
  }]
}

之后:

{
  "name": "myInfo",
  "type": {
    "type": "record",
    "name": "myInfo",
    "fields": [
      {
        "name": "size",
        "type": {"name":"size", "type": "string"}
      }
    ]
  }
}

正在运行的更新架构:

{
  "name": "data.platform_data.test_service.result",
  "type": "record",
  "fields": [
    {
      "name": "myInfo",
      "type": {
        "type": "record",
        "name": "myInfo",
        "fields": [
          {
            "name": "size",
            "type": {"name":"size", "type": "string"}
          }
        ]
      }
    }
  ]
}

要使记录属性可为空,过程与任何其他属性相同。您需要与 "null" 联合(如下图所示):

{
  "name": "data.platform_data.test_service.result",
  "type": "record",
  "fields": [
    {
      "name": "myInfo",
      "type": [
        "null",
        {
          "type": "record",
          "name": "myInfo",
          "fields": [
            {
              "name": "size",
              "type": {
                "name": "size",
                "type": "string"
              }
            }
          ]
        }
      ]
    }
  ]
}