2014-09-25 293 views
0

我有一個問題,如果可能的話,我會在Hive中解決這個問題。 的數據是這樣的:Hive中的持續時間計算

action timestamp 
a   2014-01-01 10:00:00 
b   2014-01-01 10:05:00 
started 2014-01-01 10:06:00 
c   2014-01-01 10:06:10 
d   2014-01-01 10:56:00 
paused 2014-01-01 11:15:00 
e   2014-01-01 12:00:00 

我們現在可以使用LAG()計算每個時間戳之間的持續時間,但我們想補充其計算前的「開始」的行動持續時間列和行動經過「開始」,但如果暫停,然後0 決賽桌看起來應該像下面這樣:

action timestamp    duration_before_started play_duration_after_started 
a   2014-01-01 10:00:00  00:05:00     00:00:00 
b   2014-01-01 10:05:00  00:01:00     00:00:00 
started 2014-01-01 10:06:00  00:00:00     00:00:10 
c   2014-01-01 10:06:10  00:00:00     00:39:50 
d   2014-01-01 10:56:00  00:00:00     00:19:00 
paused 2014-01-01 11:15:00  00:00:00     00:00:00 
e   2014-01-01 12:00:00  00:00:00     00:00:00 

這是可能的蜂巢一個合理的計算時間內?它將如何及時儘可能多的HDFS的並行處理功能

問候

彼得

回答

0

不確定將與該行的操作被否定,但它可以做到的。

聽起來像你只需要使用case語句來確定動作何時「開始」以確定輸出是否需要進入duration_before_started或play_duration_after_started。然後就像使用一些unix_timestamp,from_unixtime和第二個函數來進行計算一樣簡單。

有關這些日期函數的一些文檔位於此處:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF