我正在尝试使用Union数据类型支持的成员记录类型来构建AVRO的复杂记录。
{
"namespace": "proj.avro",
"protocol": "app_messages",
"doc" : "application messages",
"types": [
{
"name": "record_request",
"type" : "record",
"fields":
[
{
"name" : "request_id",
"type" : "int"
},
{
"name" : "message_type",
"type" : int,
},
{
"name" : "users",
"type" : "string"
}
]
},
{
"name" : "request_response",
"type" : "record",
"fields" :
[
{
"name" : "request_id",
"type" : "int"
},
{
"name" : "response_code",
"type" : "string"
},
{
"name" : "response_count",
"type" : "int"
},
{
"name" : "reason_code",
"type" : "string"
}
]
}
]
"messages" :
{
"published_msgs" :
{
"doc" : "My Messages",
"fields" :
[
{
"name" : "message_type",
"type" : "int"
},
{
"name" : "message_body",
"type" :
[
"record_request", "request_response"
]
}
]
}
}
}我在尝试读取这种模式时遇到错误。
我想知道-是否可以声明这样的AVRO模式-其中一个字段是复杂的用户定义消息结构的联合。
如果可能的话,你能让我知道我做错了什么吗,或者是一个这样的结构与联合类型字段的类型定义的例子?
我想使用AVRO的动态模式用法-所以指定这个模式文件运行时,并将传入的缓冲区解析为"request"/"response“。
谢谢,
发布于 2018-06-26 20:42:45
定义复杂类型的联合是可能的,你的模式的问题是它不是在字段级别定义的。您的架构必须如下所示,才能实现复杂类型的联合
{
"namespace": "proj.avro",
"protocol": "app_messages",
"doc" : "application messages",
"name": "myRecord",
"type" : "record",
"fields": [
{
"name": "requestResponse",
"type": [
{
"name": "record_request",
"type" : "record",
"fields":
[
{
"name" : "request_id",
"type" : "int"
},
{
"name" : "message_type",
"type" : "int"
},
{
"name" : "users",
"type" : "string"
}
]
},
{
"name" : "request_response",
"type" : "record",
"fields" :
[
{
"name" : "request_id",
"type" : "int"
},
{
"name" : "response_code",
"type" : "string"
},
{
"name" : "response_count",
"type" : "int"
},
{
"name" : "reason_code",
"type" : "string"
}
]
}
]
}
]
}https://stackoverflow.com/questions/51031364
复制相似问题