【问题标题】:How to record created_at and updated_at timestamps in Hive?如何在 Hive 中记录 created_at 和 updated_at 时间戳?
【发布时间】:2016-12-13 19:07:06
【问题描述】:

MySQL can automatically record created_at and updated_at timestamps. Hive 是否提供类似的机制?如果没有,实现此功能的最佳方法是什么?

【问题讨论】:

    标签: sql datetime hive timestamp hiveql


    【解决方案1】:

    Hive 不提供这种机制。您可以通过在您的选择中使用 UDF 来实现此目的:from_unixtime(unix_timestamp()) as created_at。请注意,这将在每个 mapper 或 reducer 中执行,并且可能返回不同的值。如果您需要所有数据集的相同值(对于 1.2.0 之前的 Hive 版本),请将变量传递给脚本并在内部使用:'${hiveconf:created_at}' as created_at

    更新current_timestamp 返回查询评估开始时的当前时间戳(截至 Hive 1.2.0)。同一查询中对 current_timestamp 的所有调用都返回相同的值。 unix_timestamp() 以秒为单位获取当前的 Unix 时间戳。此函数是非确定性的,并且会阻止对查询的适当优化 - 自 2.0 以来已弃用此函数,而支持 CURRENT_TIMESTAMP 常量。所以,它不是一个函数,它是一个常数! 请参阅此文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

    对于 hive 查询,当您重写表或分区或插入时,最好使用 CURRENT_TIMESTAMP,因为无论如何都要重写所有文件,而不是记录,因此 created_at 时间戳应该是相同的。

    【讨论】:

    • 如果我使用current_timestamp() 而不是unix_timestamp(),每个mapper/reducer 的值还会改变吗?
    • 不会改变。文档说 current_timestamp 在查询评估开始时返回当前时间戳(从 Hive 1.2.0 开始)。同一查询中对 current_timestamp 的所有调用都返回相同的值。谢谢这个问题。我会相应地改变我的答案
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 2011-07-17
    • 2016-08-28
    • 2015-09-16
    • 1970-01-01
    • 2013-10-05
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多