简体   繁体   中英

How to specify a default value for an enum using avro IDL?

I haven't found anything in the documentation about this, only generic bla about default values. My assumption was that it should work like this:

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}

The GenericDatumReader in Java unfortunately complains that he is finding a String but expects a MyEnum.

Can anyone confirm that this is the correct way to use a enum with a default value using avro IDL? In that case I have a bug elsewhere. Can anyone confirm that this is not the way to do it and correct me? Any input is appreciated!

Update: In my real world version of this, it seems that a newly added enum to the record is causing the issue even though it has a default value. This means that my reader schema expects an enum, whereas the record does not contain one. Schema evolution should be able to resolve this, but seems to fail. More detail: I am working with Pig here, not direct Java.

Ok, turns out this is indeed the correct way to specify a default value for an enum in an avro IDL. In my case a union {null, string} had been replaced by an enum causing all the trouble. So remember: do not change the type of a field in avro !

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM