2015-09-02 122 views
0

我一直在試圖自動化Hive中的報告,這需要在過去30天內獲取數據。Hive相當於從當前分區日期獲取數據

等效於SQL:

select * from som_table where part >= Sysdate-30 and part < sysdate-1 

我使用下面的查詢,但我不能得到MR工作開始。

select * 
from some_table 
where part >= date_add(date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),-1),1 - day(date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),-1))) 
and part < date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),-1) 

我搜索了但它說我必須通過腳本找到解決方案,但我需要在另一項工作中運行此查詢。

+0

「我搜索過但它說我必須通過腳本找到解決方案,但我需要在其他工作中運行此查詢。」請解釋這是什麼意思?你看到的具體錯誤是什麼? – gobrewers14

+0

我簡直不明白爲什麼你把「SysDate -30」翻譯成一個非常複雜的公式,最終產生「SysDate -day(SysDate)」。無論如何,「SysDate -30」是Oracle方言,而不是標準的SQL。 –

回答

0

我認爲你在Hive版本中的公式更復雜,他們需要。請嘗試以下操作:

Select 
Date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP()), 30) as thirty_days_ago, 
Date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP()), 1) as one_day_ago 
+0

Sub(-1)= Add(+1)即「明天」,而不是「昨天」;-) –

+0

謝謝!相應編輯。 – mattinbits