0

所以我试图用这个 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

4

1 回答 1

1

玩弄模式,我发现这"type": "record"是一个问题。我将其移至嵌套定义。它奏效了。似乎这里的描述有点混乱。

更改前:

{
  "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"
              }
            }
          ]
        }
      ]
    }
  ]
}
于 2020-07-24T17:57:50.120 回答