Hive非等值連接


MySQL和Oracle都支持join...on...like的操作:

SELECT *  
FROM table1  
LEFT JOIN table2  
ON table1.xxx LIKE CONCAT('%',table2.yyy,'%') 

在hive中要想使用非等值連接,可使用locate代替

--LOCATE(a,b)功能就是尋找a在b中的位置,如果找到的話,返回位置;沒找到的話,返回0。

drop table if exists directory_index_project_belong;
create table directory_index_project_belong
as
select
a.id,    
a.mac ,    
a.file_md5,    
a.directory_name,    
a.directory_size,    
a.directory_time,    
a.directory_type,    
a.directory_user,    
a.directory_home,    
a.directory_ftp ,    
a.create_date ,    
a.update_date ,    
b.project_name as project_belong,    
a.status
from
directory_index_distinct as a  left join directory_index_project b
ON(TRUE)
WHERE LOCATE(b.project_name,a.directory_home)>0 and LOCATE(b.project_name,a.directory_name)=0;

上面的語句為b.project_name在a.directory_home中出現過且不在a.directory_name中出現過

親測left join 和directory_index_distinct表中數據不一致,只保留兩表都有的數據,同join


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM