2017-05-15 107 views
0

我會盡可能地解釋我的問題。我想,以濾除日期表(只選擇記錄都包含在當月日期)和甲骨文的SQL我使用下面的查詢來實現這樣的目標:如何在日期列的Hive SQL中執行BETWEEN運算符

select * from table t1 
where t1.DATE_COLUMN between TRUNC(SYSDATE, 'mm') and SYSDATE 

我怎樣才能在Hive SQL中複製相同的過濾器?我應該用來應用過濾器的列是TIMESTAMP類型列(例如2017-05-15 00:00:00)。

我正在使用CDH 5.7.6-1。

有什麼建議嗎?

+0

是'DATE_COLUMN'分區列? –

+0

@DuduMarkovitz不,它不是分區列。 – MarioC

回答

0

請注意,unix_timestamp未修復,並且在查詢過程中將發生變化。
因此,它不能用於分區消除。
對於較新的Hive版本,請改爲使用current_date/current_timestamp

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

select * 
from table t1 
where t1.DATE_COLUMN 
      between cast(from_unixtime(unix_timestamp(),'yyyy-MM-01 00:00:00') as timestamp) 
      and  cast(from_unixtime(unix_timestamp()) as timestamp) 
; 

select cast (from_unixtime(unix_timestamp(),'yyyy-MM-01 00:00:00') as timestamp) 
     ,cast (from_unixtime(unix_timestamp()) as timestamp) 
; 

+---------------------+---------------------+ 
|   _c0   |   _c1   | 
+---------------------+---------------------+ 
| 2017-05-01 00:00:00 | 2017-05-16 01:04:55 | 
+---------------------+---------------------+ 
+0

查看更新的答案 –

-1

可以作爲字符串格式化:

where date_format(t1.DATE_COLUMN, 'y-m') = date_format(current_timestamp, 'y-m') 

我意識到我沒有蜂巢訪問的現在。文檔建議'y-m',但Java文檔建議'yyyy-mm'

+0

我嘗試了你的建議,但我得到一個語義異常錯誤「無效的函數date_format。 – MarioC