2013-07-25 3 views
5

이 문서에서 아무것도 발견하지 못했습니다. 기본 값에 대한 일반적인 bla 만 있습니다.avro IDL을 사용하여 enum에 대한 기본값을 지정하는 방법은 무엇입니까?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

자바의 GenericDatumReader 불행하게도 그가 문자열을 찾는 것을 불평하지만 MyEnum을 기대 : 내 가정은 다음과 같이 작동합니다이었다.

누구나 avro IDL을 사용하여 기본값으로 열거 형을 사용하는 올바른 방법임을 확인할 수 있습니까? 이 경우 나는 다른 곳에 버그가있다. 누구나 할 수있는 방법이 아니라는 것을 확인할 수 있습니까? 모든 의견을 환영합니다!

업데이트 : 내 실제 버전에서는 이것이 기본값으로 설정되어 있어도 레코드에 새로 추가 된 열거 형으로 인해 문제가 발생하는 것 같습니다. 즉, 내 독자 스키마에는 열거 형이 필요하지만 레코드에는 열거 형 스키마가 포함되지 않습니다. 스키마 진화가이를 해결할 수 있어야하지만 실패로 보입니다. 세부 정보 : 나는 여기 돼지와 일하는데, 자바는 직접 사용하지 않는다.

답변

3

확인을 열거 형으로 문자열을 변환하려면이 코드를 사용할 수있다 avro IDL의 enum에 대한 기본값을 지정합니다. 내 경우에는 노조 {null, string}이 모든 문제를 일으키는 열거 형으로 대체되었습니다. 따라서 기억하십시오 : avro에서 필드 형식을 변경하지 마십시오!

0

이 참으로 올바른 방법입니다 밝혀 나는 브로 IDL 모르지만 당신이 'record` 구문 확신하는 경우, 당신은

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

답변 주셔서 감사합니다. 그러나이 옵션은 avro 스키마 진화에 의존하기 때문에 (현재 새로 추가 된 열거 형에 대해 실패한 것으로 보입니다) 나를위한 선택 사항이 아닙니다. – LiMuBei

관련 문제