2017-04-07 11 views
0

論理型timestamp-millisを参照するAvro IDLで次のコードを試しましたが、動作しません。Avro IDLで論理タイプを使用するにはどうすればよいですか?

Avro IDLで論理タイプを使用するためにインポートが必要ですか?または、論理型が使用できないため、代わりにプリミティブ型(この場合はlong)を使用する必要がありますか?

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

関連する問題