MySQL can automatically record created_at and updated_at timestamps. Hive是否提供类似的机制?如果没有,那么实现此功能的最佳方法是什么?
解决方法
Hive不提供这样的机制.您可以通过在select:from_unixtime(unix_timestamp())中使用UDF作为created_at来实现此目的.请注意,这将在每个映射器或缩减器中执行,并可能返回不同的值.如果所有数据集都需要相同的值(对于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
对于配置单元查询,当您重写表或分区或插入时,最好使用CURRENT_TIMESTAMP,因为无论如何都要重写所有文件,而不是记录,因此created_at时间戳应该相同.