2016-08-20 107 views
5

我在hdfs中有一個由yyyymm分區的表pos.pos_inv。下面是查詢:即使分區謂詞出現在查詢中,也沒有找到針對別名的分區謂詞

select DATE_ADD(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),5), 
     to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),yyyymm 
    from pos.pos_inv inv 
     INNER JOIN pos.POSActvyBrdg Brdg ON Brdg.EIS_POSActvyBrdgId = Inv.EIS_POSActvyBrdgId 
     where to_date(from_unixtime(unix_timestamp(Inv.nrmlzdwkenddt, 'MM/dd/yyyy'))) 
     BETWEEN DATE_SUB(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),6) 
     and DATE_ADD(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),6) 
     and inv.yyyymm=201501 

我已經提供了查詢爲201501的分區值,但我仍然得到錯誤」

Error while compiling statement: FAILED: SemanticException [Error 10041]: No partition predicate found for Alias "inv" Table "pos_inv" 

(架構)的分區,YYYYMM爲int類型和actvydt日期被存儲爲串類型。

+1

jeff,你正在使用哪個版本的配置單元,我認爲有一些開放的jira問題(https://issues.apache.org/jira/browse/HIVE-4905,https://issues.apache.org/jira/browse/HIVE-10454 )當分區謂詞列用於Join組合時,如果您使用的是舊版本的配置單元,請嘗試將mapred模式設置爲nonstrict並運行查詢'set hive.mapred。 mode = nonstrict' – Aditya

+1

如果我使用set hive.mapred.mode = nonstrict,那麼將掃描整個數據集而不是特定的分區值。 – jeff

+0

jeff,我認爲它的解決方法就是暫時的,可能是這個補丁在最新版本中更新,哪個版本的配置單元是你的,它可以在更高版本中嘗試嗎? – Aditya

回答

4

這發生COS蜂房被設定爲嚴格模式。 這允許在分區表來訪問在HDFS各個分區/文件夾。

set hive.mapred.mode=unstrict; it will work