如何使用avro IDL为枚举指定默认值?

LiM*_*Bei 6 java enums idl avro

我没有在文档中找到任何关于此的内容,只有关于默认值的泛型bla.我的假设是它应该像这样工作:

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,Java中的GenericDatumReader抱怨他正在寻找一个字符串,但期望一个MyEnum.

任何人都可以确认这是使用avro IDL使用具有默认值的枚举的正确方法吗?在那种情况下我在其他地方有一个错误.任何人都可以确认这不是这样做的方法并纠正我吗?任何输入都表示赞赏!

更新:在我的真实世界版本中,似乎新添加的记录枚举导致问题,即使它具有默认值.这意味着我的读者架构需要枚举,而记录不包含枚举.模式演变应该能够解决这个问题,但似乎失败了.更多细节:我在这里与Pig合作,而不是直接Java.

LiM*_*Bei 6

好的,事实证明这确实是为 avro IDL 中的枚举指定默认值的正确方法。在我的情况下,联合 {null, string} 已被枚举替换,导致所有麻烦。所以请记住:不要更改 avro 中字段的类型