Схема 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"
}
}
]
}
]
}
]
}