【问题标题】:Hive's Timestamp is same as parquet's Timestamp?Hive 的时间戳与 parquet 的时间戳相同吗?
【发布时间】: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”不同的磁盘二进制编码?

谢谢

【问题讨论】:

    标签: timestamp hive parquet


    【解决方案1】:

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

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

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

    【讨论】:

    • 链接已损坏。我需要知道int96 表示的细节,您是否有机会提供详细信息的更新链接?
    • 很遗憾,web.archive.org 没有抓取该链接,但我在剖析 int96 时间戳的详细示例中添加了一个不同的链接。
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2019-08-04
    • 2021-02-12
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多