如何在Avro IDL中使用逻辑类型?

时间:2017-04-07 21:44:17

标签: avro idl

我在Avro IDL中尝试了以下代码,该代码引用了逻辑类型timestamp-millis并且它不起作用。

在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;
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用通用annotation

appointment_service

实际上还可以使用protocol test { record test { @logicalType("timestamp-millis") long time; } } 和其他一些逻辑类型的简写(文档尚未发布,请参阅here获取完整的别名列表):

timestamp-millis

答案 1 :(得分:0)

LogicalType timestamp-millis与 long 类型一起使用,因此您可以使用这样的架构:

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