2017-04-07 25 views
0

논리적 유형 timestamp-millis를 참조하는 Avro IDL에서 다음 코드를 시도했지만 작동하지 않습니다.Avro IDL에서 논리적 유형을 사용하려면 어떻게해야합니까?

Avro IDL에서 논리적 유형을 사용하려면 가져 오기가 필요합니까? 또는 논리적 인 타입을 사용할 수 없기 때문에 대신 원시 타입 (이 경우에는 길다)을 사용해야합니까?

protocol test { 
    record test { 
     timestamp-millis time; 
    } 
} 

결과 :이 같은 스키마를 사용할 수 있도록

protocol test { 
    record test { 
     long time; 
    } 
} 

답변

0

LogicalType 타임 스탬프 - 밀리가 입력 사용됩니다 :

Exception in thread "main" org.apache.avro.compiler.idl.ParseException: Undefined name 'timestamp', at line 3, column 9 

이것은 물론 작동

{ 
    "type" : "record", 
    "name" : "Test", 
    "fields" : [ { 
    "name" : "time", 
    "type" : { 
     "type" : "long", 
     "logicalType" : "timestamp-millis" 
    } 
    }] 
} 
+0

감사합니다,이 올바른지,하지만 난 JSON 스키마 – arosca

1

당신이 사용할 수있는 annotation 일반 :

protocol test { 
    record test { 
     @logicalType("timestamp-millis") 
     long time; 
    } 
} 

실제로있다 또한 속기 당신이 timestamp-millis에 사용할 수있는 다른 논리적 유형의 소수 (문서는 전체 목록은 here를 참조, 아직 공개되지 않은 별명) :

protocol test { 
    record test { 
     timestamp_ms time; 
    } 
} 
+0

모두 작업에 접근, 감사보다는 IDL에 대해 물어했다! – arosca