2013-07-25 14 views
5

これについてのドキュメントでは何も見つかりませんでしたが、デフォルト値については汎用のblaしかありません。avro IDLを使用してenumのデフォルト値を指定するにはどうすればよいですか?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

JavaでGenericDatumReaderが、残念ながら、彼は文字列を見つけることであることを不平を言うが、MyEnumを期待:私の仮定は、それがこのように動作しなければならないということでした。

これは、avro IDLを使用してデフォルト値で列挙型を使用する正しい方法であることを誰もが確認できますか?その場合、私は他の場所にバグがあります。 これはこれを実行して私を修正する方法ではないことを誰もが確認できますか? すべての入力をいただければ幸いです!

更新: 私の実際のバージョンでは、レコードに新しく追加された列挙型がデフォルト値を持っていても問題を引き起こしているようです。つまり、読者のスキーマには列挙型が必要ですが、レコードには列挙型が含まれていません。スキーマの進化はこれを解決できるはずですが、失敗するようです。 詳細:私はここで豚と協力しています。

答えて

3

オクラホマにあなたの文字列を変換するには、このコードを使用することができ、これは確かに正しい方法で判明avro IDLのenumのデフォルト値を指定します。私の場合、組合{null、string}は列挙型に置き換えられ、すべての問題を引き起こしました。覚えておいてください:アブロのフィールドのタイプを変更しないでください

0

私はアブロIDLを知らないが、あなたはrecord`構文」確信している場合、あなたはあなたの列挙型

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

回答ありがとうございますが、私はavroスキーマの進化に依存しているので、これは私にとってはオプションではありません。 – LiMuBei

関連する問題