pubsub 主题模式验证是否支持嵌套 json?
Does pubsub topic schema validation support nested json?
我在使用嵌套消息创建 AVRO 模式时遇到问题。
例如JSON 留言,
{"metadata": {"key1": "value1", "key2": "value2"}, "payload": {"key1": "value1", "key2": "value2"}}
根据 apache avro 文档,我认为这个模式定义应该有效,但似乎无效:
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "metadata",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
},
{
"name" : "payload",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
}
]
}
是我做错了什么还是不支持嵌套?
您提供的 Avro 架构定义实际上无效。指定此模式的方式是:
{
"type":"record",
"name":"Avro",
"fields":[
{
"name":"metadata",
"type":{
"type":"record",
"name":"MetadataRecord",
"fields":[
{
"type":"string",
"name":"key1"
},
{
"type":"string",
"name":"key2"
}
]
}
},
{
"name":"payload",
"type":{
"type":"record",
"name":"PayloadRecord",
"fields":[
{
"type":"string",
"name":"key1"
},
{
"type":"string",
"name":"key2"
}
]
}
}
]
}
还有更多工作要做,以确保在 public 预览功能时,架构创建时返回的错误消息提供更多详细信息。
如果您 运行 通过 avro 解析器 Python:
,您可以看到有关错误的更多详细信息
import avro.io
schema = """
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "metadata",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
},
{
"name" : "payload",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
}
]
}
"""
parsed_schema = avro.schema.parse(schema)
运行 此脚本将产生错误:
avro.schema.SchemaParseException: Type property "record" not a valid Avro schema: Could not make an Avro Schema object from record.
我在使用嵌套消息创建 AVRO 模式时遇到问题。
例如JSON 留言,
{"metadata": {"key1": "value1", "key2": "value2"}, "payload": {"key1": "value1", "key2": "value2"}}
根据 apache avro 文档,我认为这个模式定义应该有效,但似乎无效:
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "metadata",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
},
{
"name" : "payload",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
}
]
}
是我做错了什么还是不支持嵌套?
您提供的 Avro 架构定义实际上无效。指定此模式的方式是:
{
"type":"record",
"name":"Avro",
"fields":[
{
"name":"metadata",
"type":{
"type":"record",
"name":"MetadataRecord",
"fields":[
{
"type":"string",
"name":"key1"
},
{
"type":"string",
"name":"key2"
}
]
}
},
{
"name":"payload",
"type":{
"type":"record",
"name":"PayloadRecord",
"fields":[
{
"type":"string",
"name":"key1"
},
{
"type":"string",
"name":"key2"
}
]
}
}
]
}
还有更多工作要做,以确保在 public 预览功能时,架构创建时返回的错误消息提供更多详细信息。
如果您 运行 通过 avro 解析器 Python:
,您可以看到有关错误的更多详细信息import avro.io
schema = """
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "metadata",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
},
{
"name" : "payload",
"type" : "record",
"fields": [
{
"type" : "string",
"name" : "key1"
},
{
"type" : "string",
"name" : "key2"
}
]
}
]
}
"""
parsed_schema = avro.schema.parse(schema)
运行 此脚本将产生错误:
avro.schema.SchemaParseException: Type property "record" not a valid Avro schema: Could not make an Avro Schema object from record.