所以我试图用这种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"}
}]
}
]
}
}
我应该提到im也为此使用avsc
。有人有什么想法吗?我已经尝试了几乎所有组合,但是afaik解析这样的objct的唯一方法是使用record
答案 0 :(得分:1)
在研究模式时,我发现"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"
}
}
]
}
]
}
]
}