欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apache Hive join操作

程序员文章站 2024-03-12 20:06:14
...

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的结果取左表,即只有左表的字段,而没有右表的任何字段。