【发布时间】:2015-04-02 07:01:15
【问题描述】:
关于逻辑类型和时间戳的镶木地板规范,似乎说 https://github.com/Parquet/parquet-format/blob/master/LogicalTypes.md "TIMESTAMP_MILLIS 用于组合的逻辑日期和时间类型。它必须注释一个 int64,用于存储从 Unix 纪元开始的毫秒数,即 UTC 1970 年 1 月 1 日 00:00:00.000。
"
即这里说类型只精确到毫秒,从 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 在镶木地板上的时间戳编码具有不同的规范,精确到纳秒,并且从“4713 年 1 月 1 日星期一”开始(在 jodd.datetime.JDateTime 中定义)
所以 Hive 的 parquet 时间戳存储与上述规范完全不同?
日期支持呢? https://issues.apache.org/jira/browse/HIVE-8119 我们是否会有与上述文档中指定的“int32”不同的磁盘二进制编码?
谢谢
【问题讨论】: