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

时间:2013-07-25 09:59:44

标签: java enums idl avro

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

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我不知道avro IDL,但如果您确定'record`语法,则可以使用此代码将String转换为枚举类型

MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED")