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

posted @ 2021-03-29 17:25  勤奋的园  阅读(1527)  评论(0编辑  收藏  举报