2013-07-25 11 views
5

Nie znalazłem nic w dokumentacji na ten temat, tylko ogólne informacje na temat wartości domyślnych. Moje założenie, że to powinno działać tak:Jak określić wartość domyślną dla wyliczenia przy użyciu avro IDL?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

GenericDatumReader w Javie niestety skarży się, że jest on znalezienie String ale oczekuje MyEnum.

Czy ktoś może potwierdzić, że jest to właściwy sposób używania wyliczenia z wartością domyślną za pomocą avro IDL? W takim przypadku mam błąd w innym miejscu. Czy ktoś może potwierdzić, że to nie jest sposób, aby to zrobić i poprawić mnie? Wszelkie dane wejściowe są mile widziane!

Aktualizacja: Aktualizacja: Wydaje mi się, że w mojej prawdziwej wersji tej wersji przyczyną problemu jest nowo dodane wyliczenie, mimo że ma wartość domyślną. Oznacza to, że mój schemat czytelnika oczekuje wyliczenia, podczas gdy rekord nie zawiera. Ewolucja schematu powinna być w stanie rozwiązać ten problem, ale wydaje się nie udać. Więcej szczegółów: Pracuję tutaj z Pigem, a nie bezpośrednią Javą.

Odpowiedz

3

Ok, okazuje się, jest to rzeczywiście poprawny sposób określić domyślną wartość wyliczenia w IDO avro. W moim przypadku związek {null, string} został zastąpiony przez enum powodujący wszystkie kłopoty. Dlatego pamiętaj: nie zmieniaj typu pola w avro!

0

nie wiem Avro IDL, ale jeśli jesteś pewien „składnia record`, można użyć tego kodu, aby przekonwertować ciąg do typu enum

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

Dziękuję za odpowiedź, ale nie jest to dla mnie opcja, ponieważ jestem zależny od ewolucji schematu avro (co wydaje się nie udać dla nowo dodanego wyliczenia w tej chwili). – LiMuBei

Powiązane problemy