Hive踩過的坑-HIVE處理非等值連接(JOIN XX ON XX LIKE XX) 發佈於 1 年前 (2018年11月18日)
- 2020 年 4 月 9 日
- 筆記
SELECT * FROM TABLE1 A LEFT OUTER JOIN TABLE2 B ON A.XX LIKE CONCAT('%' , B.YY , '%')
這個語句在oralce 或者mysql 都可以執行
可是用以上代碼放到HIVE中執行,發現報錯,原因是HIVE不支持非等值連接。
所以還是用最老套的辦法
SELECT * FROM TABLE1 A ,TABLE2 B WHERE A.XX LIKE CONCAT('%' , B.YY , '%')
達到相同的辦法吧,雖然這個真的把性能和速度降低了N倍,但是hive真的只能這樣吧(自己想到的辦法)
然後也可以使用 LOCATE(substr , str) 函數,如果包含,則返回 >0 的數,否則返回0
select b.rule_id,a.imei from table1 a left outer join table1 b ON(TRUE)/1=1 WHERE LOCATE(upper(b.iot_rule),upper(a.ua))>0 limit 20;
至於為什麼HIVE不支持非等值連接,這可能是因為Hive很難把不等條件翻譯成mapreduce job