2017-08-14 93 views
0

我正在嘗試在Hive中的2個表上執行左外連接。這裏的連接條件涉及LIKE運算符。這是我試圖執行查詢:在HIVE中左外連接導致錯誤

SELECT * 
FROM a 
LEFT OUTER JOIN 
    (SELECT * 
    FROM b 
    WHERE class = 'ex') ON b.mo LIKE CONCAT(a.device_name ,'%') 
         AND a.time_stamp BETWEEN to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) - 660), "z") 
              AND to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) + 60),"z") 

當我執行此查詢,我得到一個錯誤

左右兩側別名遇到JOIN「」%「」

這裏的目的是在給定條件下(即基於設備名稱和time_stamp)對錶a和b執行左外連接。

如果有人能幫助我,我會很感激。

回答

0

likejoin條件中不受支持。解決此問題的一個方法是在where子句中指定條件。

SELECT * --better specify columns needed instead of * 
FROM a 
LEFT OUTER JOIN (SELECT * from b WHERE class = 'ex') b ON 1=1 
WHERE b.mo LIKE CONCAT(a.device_name ,'%') 
AND a.time_stamp 
BETWEEN to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) - 660),"z") 
AND to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) + 60),"z") 

但是這種方法的問題在於,join變成一個inner join爲你過濾右表(B在這種情況下)。

+0

所以我不能用LIKE條件執行左外連接嗎? – codecracker

+0

不,據我所知......即使使用「內連接」,也不能使用「like」。 –

+0

哦!感謝你及時的答覆! – codecracker