我是靠谱客的博主 留胡子发箍,最近开发中收集的这篇文章主要介绍HIVE中表之间相互联系的方式小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

HIVE中表之间相互联系的方式小结

今天总结了一下hive中表与表之间发生关联的方式,大概的有以下几种,日后再补充:偷笑偷笑偷笑

先建立两张表:user+job

表的数据结构:

--------------------------------------------------

user:

user_id name

1 张三
2 李四
3 王五

create external table if not exists user 
(user_id int, name string) 
row format delimited 
fields terminated by 't' 
location '/in/user';

--------------------------------------------------

job:

job_id jobuser_id

1 工程师1
2 产品 2
3 设计师 4
4 工程师 5

create external table if not exists job 
(job_id int,job string,user_id int) 
row format delimited 
fields terminated by 't' 
location '/in/job';

--------------------------------------------------

1.内连接:表1 inner join 表2 on 条件
获取两个表共有的
select * from user u 
inner join 
job j 
on u.user_id = j.user_id;


***************************************************************************************************

2.左外连接:表1 left outer join 表2 on 条件
左大右小,左数据去右边找,找不到就返回null,返回的数据cnt等于左表数据数量
select * from user u 
left outer join 
job j 
on u.user_id = j.user_id;


***************************************************************************************************

3.右外连接:表1 right outer join 表2 on 条件
右大左小,右表找不到就返回null,返回的数据条数等于右表的数据条数
select * from user u 
right outer join 
job j 
on u.user_id = j.user_id;


***************************************************************************************************

4.左半开联接:表1 left semi join 表2 on 条件
左表查询出所有满足表2条件的

select * from user u 
left semi join  
(select user_id from job where user_id=1 or user_id=2) j 
on u.user_id=j.user_id;

select * from user u 
left semi join 
job j 
on u.user_id=j.user_id;

***************************************************************************************************

5.完全外连接:表1 full outer join 表2 
返回左表和右表的所有行数,两个表中任意一个表中字段在另一个表中不存在就返回null,如果不加on条件就变成交叉连接了

select * from 
(select distinct user_id from user) u 
full outer join 
job j 
on u.user_id=j.user_id;



不加on条件就变成交叉连接:


***************************************************************************************************

6.交叉连接:表1 join 表2
又称笛卡尔积,返回左表数x右表数(两个表数量乘积),没有on的条件判断,左表中的每一行与右表中的所有行组合
select * from user 
join 
job;


***************************************************************************************************

7.逗号“,”,从不同表中直接查询,加where条件等

select u.name,j.position from 
user u,job j 

where u.user_id=j.user_id;



如果不加where条件,就会变成交叉连接了

select u.name,j.position from 
user u,job j;


***************************************************************************************************

8.合并数据集:表1 union all 表2
两个表的字段名称和类型必须一致

select * from 
(select user_id,name from user 
UNION ALL 
select user_id,name from user2) a;


***************************************************************************************************



最后

以上就是留胡子发箍为你收集整理的HIVE中表之间相互联系的方式小结的全部内容,希望文章能够帮你解决HIVE中表之间相互联系的方式小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部