您的位置:首页 > 运维架构 > Apache

Apache Hive join操作

2019-03-20 14:49 148 查看

hive中对in 与 exists的查询比较弱,hive2中支持,但是性能比较差,hive1中不支持

注意:

hive中支持等值连接,但是不支持非等值连接

hive 支持多关联键的连接的,但是仅仅支持and的,不支持or的

hive支持多表join

hive join分类:

内连接,外连接和半连接

1.内连接 inner join|join

求两表交集

select * from default.sc sc inner join default.student stu on sc.stuid=stu.stuid

2. 外连接 (基本上与MySQL等一致)

left join
: 左连接以左表为主表,取左表所有记录,拿着左表关联键再取B表中的数据,左表中没有的则不取,左表有的但右表没有的则补充为null.

right join
: 右连接,以右表为主表,与left join相反

full outer join|full join
: 全连接,求两个表的并集,即包含两个表全部的数据

select * from default.sc sc left join default.student stu on sc.stuid=stu.stuid
select * from default.sc sc right join default.student stu on sc.stuid=stu.stuid
select * from default.sc sc full join default.student stu on sc.stuid=stu.stuid

3.半连接 left semi join 在内连接的基础上只取左表的数据,只能查询左侧表的数据

left semi join:优化in/exists,在hive中,绝大多数hql语句都会从转换为Mapreduce任务的,in/exists 语句在转换的时候,map端的key不好确定。

left semi join 可以指定关联键,进行转换的时候比较好确定mapkey。当然也可以使用inner join只查询左表

select * from default.sc sc left semi join default.student stu on sc.stuid=stu.stuid

相当于对inner join的结果取左表,即只有左表的字段,而没有右表的任何字段。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: