如何在JSON Avro Schema中创建枚举类型数组?
解决Avro Schema中枚举数组字段的定义问题
我来帮你搞定这个问题!你已经正确定义了枚举类型,问题出在数组字段引用枚举的语法上——你之前的写法不符合Avro Schema的规范,所以无法生效。
错误原因分析
你尝试的"items": { "extensions" }是无效的Avro语法:Avro中引用已定义的类型需要直接使用字符串形式的类型名称,而不是这种对象写法。
两种可行的解决方案
方案1:将枚举定义在Schema的types数组中并引用
如果希望枚举可以被多个字段复用,推荐把枚举放在Schema的types数组里,然后在数组字段的items中直接引用枚举名称:
{ "type": "record", "name": "data", "fields": [ { "name": "validExtensions", "type": { "type": "array", "items": "extensions" } }, { "name": "fileName", "type": "string" } ], "types": [ { "type": "enum", "name": "extensions", "symbols": [".zip", ".txt", ".csv", ".pdf", ".xls", ".xlsx"] } ] }
方案2:内联枚举定义
如果这个枚举只给validExtensions字段使用,也可以直接把枚举定义写在items中:
{ "type": "record", "name": "data", "fields": [ { "name": "validExtensions", "type": { "type": "array", "items": { "type": "enum", "name": "extensions", "symbols": [".zip", ".txt", ".csv", ".pdf", ".xls", ".xlsx"] } } }, { "name": "fileName", "type": "string" } ] }
验证效果
以上两种Schema都能完美支持你期望的JSON输出:
{ "data": { "validExtensions": [".csv", ".xls"], "fileName": "testing.csv" } }
内容的提问来源于stack exchange,提问作者staten12
相关产品推荐
相关产品推荐

