簡體   English   中英

如何使用avro IDL為枚舉指定默認值?

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

我沒有在文檔中找到任何關於此的內容,只有關於默認值的泛型bla。 我的假設是它應該像這樣工作:

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}

不幸的是,Java中的GenericDatumReader抱怨他正在尋找一個字符串,但期望一個MyEnum。

任何人都可以確認這是使用avro IDL使用具有默認值的枚舉的正確方法嗎? 在那種情況下我在其他地方有一個錯誤。 任何人都可以確認這不是這樣做的方法並糾正我嗎? 任何輸入都表示贊賞!

更新:在我的真實世界版本中,似乎新添加的記錄枚舉導致問題,即使它具有默認值。 這意味着我的讀者架構需要枚舉,而記錄不包含枚舉。 模式演變應該能夠解決這個問題,但似乎失敗了。 更多細節:我在這里與Pig合作,而不是直接Java。

好的,事實證明這確實是在avro IDL中為枚舉指定默認值的正確方法。 在我的例子中,union {null,string}已被枚舉替換,導致所有麻煩。 所以請記住: 不要在avro中更改字段的類型

我不知道avro IDL,但如果您確定'record`語法,您可以使用此代碼將您的String轉換為您的枚舉類型

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM