概述
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中表之间相互联系的方式小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复