2016-12-13 88 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

相關問題