2017-04-07 90 views
0

我试过以下Avro IDL中引用逻辑类型timestamp-millis的代码,它不起作用。如何在Avro IDL中使用逻辑类型?

是否需要在Avro IDL中使用逻辑类型的导入?或者逻辑类型是不可用的,我需要使用原始类型(在这种情况下是long)呢?

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

结果:

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

这个工作,当然:

protocol test { 
    record test { 
     long time; 
    } 
} 

回答

0

LogicalType时间戳-millis的使用与类型,所以您可以使用的模式是这样的:

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

谢谢,这是正确的,但我问的是IDL而不是JSON模式 – arosca

1

您可以使用一个通用的annotation

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

这事实上也是一种简写你可以使用timestamp-millis和其他逻辑类型的少数(文档也尚未公布,请here对的完整列表别名):

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

这两种方法的工作,谢谢! – arosca