【问题标题】:How to specify timestamp in avro schema如何在 avro 模式中指定时间戳
【发布时间】:2018-06-04 11:47:01
【问题描述】:

我正在尝试将此值 1520200800049 转换为 Avro。这是我的模式中字段的规范,顺便说一下,union 模式:

{
 "name" : "TimestampField"
 "type" : ["null",{
    "type":"long",
    "logicalType":"timestamp-millis"
 }]
}

这是我得到的错误:

Caused by: org.apache.avro.UnresolvedUnionException: Not in union ["null",{"type":"long","logicalType":"timestamp-millis"}]: 1520200800049 
    at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:740) 
    at org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:205) 
    at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:123) 
    at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75) 
    at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:166) 
    at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:156) 
    at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:118) 
    at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75) 
    at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:62) 
    at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:302)

当我将架构更改为:

{
 "name" : "TimestampField"
 "type" : ["null" , "long"]
}

它有效。但这不是重点。我想将其转换为timestamp 用于Hive 目的。

【问题讨论】:

    标签: java hive avro


    【解决方案1】:

    从 Hive 1.1 开始支持。详情here

    【讨论】:

    • 感谢您提供的信息。但是您知道为什么具有逻辑类型的模式不起作用吗?我相信这是应该做的。但是,我没有看到错误在哪里
    • 你能分享你的 Hive 版本吗?
    【解决方案2】:

    检查 Hive 服务器类路径中的 Avro JAR。可能是不支持逻辑类型的 1.7 (https://avro.apache.org/docs/1.7.4/spec.html)

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      相关资源
      最近更新 更多