2016-03-03 88 views
3

我在Hive上有幾個表,我的查詢試圖檢索過去x天的數據。當我使用直接日期時,Hive修剪分區,但在使用公式時進行全表掃描。計算列上的Hive分區修剪

select * 
from f_event 
where date_key > 20160101; 

scanned partitions.. 

s3://...key=20160102 [f] 
s3://...key=20160103 [f] 
s3://...key=20160104 [f] 

如果我使用一個公式,比如說,讓過去四周數據

這是掃描所有分區表中的。

環境:Hadoop的2.6.0,EMR,蜂房上S3,蜂房1.0.0

回答

6

蜂房當過濾表達式包含非確定性功能,諸如unix_timestamp()不會觸發分區修剪。

對此的很好的理由在the discussion提到:

試想一個情況下,你必須:

WHERE partition_column = f(unix_timestamp()) AND ordinary_column = f(unix_timestamp)

謂詞的右手側具有在地圖時進行評估,而 你假定左側應 編譯時進行評估,這意味着你有 UNIX_TIMESTAMP的兩個不同的值()漂浮在四周,只能結束。