Hive的时间戳与镶木地板的时间戳相同?

时间:2015-02-03 06:42:23

标签: timestamp hive parquet

关于逻辑类型和时间戳的镶木地板规格具体,似乎说 https://github.com/Parquet/parquet-format/blob/master/LogicalTypes.md " TIMESTAMP_MILLIS用于组合的逻辑日期和时间类型。它必须注释一个int64,它存储Unix时代的毫秒数,1970年1月1日00:00:00.000,UTC。

"

即。在这里它说类型只精确到毫秒,它从1970年开始。

但如果你看看hive-parquet代码 https://github.com/apache/hive/blob/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java#L142 https://github.com/apache/hive/blob/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/timestamp/NanoTime.java#L54 似乎hive在镶木地板上的时间戳编码具有不同的规格,精确到纳秒级,并从"星期一,1月1日,4713" (在jodd.datetime.JDateTime中定义)

所以Hive的镶木地板时间戳存储与上述规格完全不同?

日期支持怎么样? https://issues.apache.org/jira/browse/HIVE-8119 我们是否会使用与" int32"不同的磁盘二进制编码;在上面的doc?

中指定

感谢

1 个答案:

答案 0 :(得分:1)

根据过去曾在此处链接但已被删除的讨论,似乎当在Hive中添加了对Parquet中保存时间戳的支持时,主要目标是与Impala的实现兼容,可能早于将timestamp_millis类型添加到Parquet规范中。

Impala的时间戳表示映射到int96 Parquet类型(日期为4个字节,时间为8个字节,详细信息为here)。

所以不,在Parquet中存储Hive时间戳不会使用timestamp_millis类型,而是使用Impala的int96时间戳表示。