Схема avro получает неопределенное имя типа при использовании типа записи

Поэтому я пытаюсь разобрать объект с помощью этой схемы 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для этого. У кого-нибудь есть идеи? Я перепробовал почти все комбинации, но единственный способ разобрать такой объект - использоватьrecord

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"
              }
            }
          ]
        }
      ]
    }
  ]
}
Другие вопросы по тегам