2017-05-05 1 views
0

apache avro를 사용하고 있으며 내 스키마에서 논리 유형을 가져 오려고합니다. 나는 함수 getLogicalType()을 사용해 보았지만 null을 리턴한다. 나는 틀린 것을 이해하지 못한다. 내 스키마는 다음과 같습니다. 다음apache avro api의 getLogicalType() 함수가 null 인 경우에도 반환합니다.

{ 
    "namespace": "example.avro", 
    "type": "record", 
    "name": "User", 
    "fields": [ 
     {"name": "name", "type": "string"}, 
     {"name": "favorite_number", "type": "int", "logicalType": "decimal", "precision": 2, "scale": "2"}, 
     {"name": "favorite_color", "type": ["string", "null"]} 
    ] 
} 

내가

for(Schema.Field currField : schema.getFields()) { 

     field = createFieldList(currField.name(), currField.schema().getType().toString(), currField.schema().getLogicalType()); 
     fields.add(field); 
    } 
+0

을 제공

{ "name": "favorite_number", "type": { "type": "int", "logicalType": "decimal", "precision": 2, "scale": "2" } }, 

해야한다 루프를 모든 필드에 대해 정의하고 * logicalType *을 두 번째 필드에만 정의한 경우 getLogicalType()은 적어도 첫 번째 및 세 번째 필드에 대해 null을 반환합니다. createFieldList()에서 사용하는 대신 각 필드에 대해 getLogicalType의 결과를 인쇄 해보십시오. – LLL

+0

아니요, 모두 null로 인쇄됩니다. – Hazzard

답변

0

남자 나는 대답을 찾은 것 같아요. 논리적 유형이 선언되는 방식은 잘못되었습니다.

대신

{ 
    "name": "favorite_number", 
    "type": "int", 
    "logicalType": "decimal", 
    "precision": 2, 
    "scale": "2" 
}, 

의 내가 getlogicalType()를 사용할 때 나는 당신이 내 대답에 코멘트에 썼던 것처럼 이제 함수가 나에게 예상 된 결과

+0

이것이 해결책이라면 나는 SchemaParseException을 얻어야한다고 생각한다. 그리고 당신이 그것을 얻지 못했다고 썼을 때 나는 avro의 버그일지도 모른다라고 생각한다. 어쨌든 그것은 당신을 위해 잘 작동합니다. – LLL

+1

그런데 getObjectProps() 함수를 사용하여 첫 번째 인스턴스에서 logicalType에 액세스 할 수 있습니다. 필드의 모든 속성에 액세스 할 수있는 맵을 리턴합니다. 예외를 던져야하는지에 관해서는, 나는해야하는지 정말로 모른다. 당신의 도움을 주셔서 감사합니다. – Hazzard

0

당신은 그것을 here를 초기화합니다 logicalType here 또는 setLogicalType을 설정합니다 구문 분석 방법을 사용하는 데 필요한 logicalType에 접근하고있는 코드입니다. 나는이 라이브러리를 경험하지 못했지만 코드를 기반으로 다른 방법을 보지 못했다.

그러면이 변수는 사용중인 getLogicalType 방법으로 반환됩니다.

+0

구문 분석 방법을 사용했습니다. 그런 다음 필드에 액세스하려고 시도하고 논리적 유형을 가져 오려고했습니다. 그러나 그것은 null을 돌려 줬다. currField.schema(). getLogicalType(). 여기서 currField는 Field 유형입니다. – Hazzard

+0

예 : catch하고 무시하지 않았습니까? 예 : SchemaParseException? – LLL

+0

오류 왜 예외를 던지겠습니까? 위 스키마는 파싱됩니다. – Hazzard

관련 문제