2013-07-25 1 views
5

Je n'ai rien trouvé dans la documentation à ce sujet, seulement bla générique sur les valeurs par défaut. Mon hypothèse était que cela devrait fonctionner comme ceci:Comment spécifier une valeur par défaut pour une énumération utilisant avro IDL?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

Le GenericDatumReader en Java se plaint malheureusement qu'il est de trouver une chaîne, mais attend un MyEnum. Est-ce que quelqu'un peut confirmer que c'est la bonne façon d'utiliser une énumération avec une valeur par défaut en utilisant avro IDL? Dans ce cas j'ai un bug ailleurs. Quelqu'un peut-il confirmer que ce n'est pas la façon de le faire et de me corriger? Toute contribution est appréciée!

Mise à jour: Dans ma version du monde réel, il semble qu'une nouvelle énumération de l'enregistrement provoque le problème même s'il a une valeur par défaut. Cela signifie que mon schéma de lecteur attend une énumération, alors que l'enregistrement n'en contient pas. L'évolution du schéma devrait être capable de résoudre cela, mais semble échouer. Plus de détail: Je travaille avec Pig ici, pas directement Java.

Répondre

3

Ok, tourne c'est en effet la bonne façon pour spécifier une valeur par défaut pour une énumération dans un IDL avro. Dans mon cas, une union {null, string} avait été remplacée par une énumération causant tous les problèmes. Alors rappelez-vous: ne change pas le type d'un champ en avro!

0

Je ne sais pas Avro IDL mais si vous êtes sûr « syntaxe record`, vous pouvez utiliser ce code pour convertir votre chaîne à votre type ENUM

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

Merci pour la réponse, mais ce n'est pas une option pour moi car je dépend de l'évolution du schéma avro (qui semble échouer pour une nouvelle énumération en ce moment). – LiMuBei

Questions connexes