2016-12-13 41 views

回答

2

Hive不提供这样的机制。您可以通过在您的选择中使用UDF来实现此目的:from_unixtime(unix_timestamp()) as created_at。请注意,这将在每个映射器或缩减器中执行,并可能返回不同的值。如果你需要的所有数据集相同的值(1.2.0之前版本巢),变量传递给脚本,并用它作为内部:'${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

对于蜂巢查询时,重写表或分区或插入,因为所有的文件(S)反正都被改写,没有记录,所以created_at时间戳应该是一样的CURRENT_TIMESTAMP是优选的。

+1

如果我使用'current_timestamp()'而不是'unix_timestamp()',那么每个mapper/reducer的值会不会改变? –

+0

不会改变。该文档说current_timestamp 返回查询评估开始时的当前时间戳(从Hive 1.2.0开始)。同一查询中current_timestamp的所有调用返回相同的值。感谢这个问题。我将相应地更改我的答案 – leftjoin

+0

因为我已经迁移到1.2.1版本,所以我会将此功能应用于我的所有代码。再次感谢这个问题 – leftjoin

相关问题