在Google Cloud Pub/Sub的Avro Schema中定义可空列表遇异常
Google Cloud Pub/Sub Avro Schema验证异常问题解答
问题原因
你的问题出在Avro JSON编码的联合类型处理规则上:
- 当字段类型是包含
null的联合类型(比如你的["null", "array"])时,对于非null的复杂类型值(数组、自定义record这类),Avro要求必须用带类型标识的对象结构包裹,不能直接传原始数组值。 - 而
null值不需要额外包装,直接传null就能通过验证,这就是为什么你的null测试消息能正常通过。
修正后的非空列表测试消息
把数组值包装成带type和value的结构即可通过验证:
{ "nullable_list": { "type": "array", "value": [ {"field1": 10, "field2": "example1"}, {"field1": 20, "field2": "example2"} ] } }
补充说明
Google Cloud Pub/Sub的Avro schema验证严格遵循Avro官方JSON编码规范:
- 若联合类型包含基本类型(比如
["null", "int"]),可以直接传递原始值(如123),无需包装; - 但涉及复杂类型(数组、自定义record、map等)时,必须显式指定类型,用
{"type": "类型名", "value": 实际值}的结构传递,否则会被判定为不符合schema规范。
内容的提问来源于stack exchange,提问作者Andres Sanchez
相关产品推荐
相关产品推荐

