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"
}
}
]
}
]
}
]
}
所以我正在尝试使用此 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"
}
}
]
}
]
}
]
}