大数据学习之路35-hive的join

select

join

inner join

left join  == left outer join

right join == right outer join

full outer join

我们先来创建数据和表:

大数据学习之路35-hive的join_第1张图片

大数据学习之路35-hive的join_第2张图片

内连接(内连接的本质其实是取笛卡尔集):

select a.*,b.* from t_a a join t_b b on a.id = b.id;

大数据学习之路35-hive的join_第3张图片

左外连接:

select a.*,b.* from t_a a left join t_b b on a.id = b.id;

大数据学习之路35-hive的join_第4张图片

右外连接:

select a.*,b.* from t_a a right join t_b b on a.id = b.id;

大数据学习之路35-hive的join_第5张图片

全外连接:

select a.*,b.* from t_a a full join t_b b on a.id = b.id;

大数据学习之路35-hive的join_第6张图片

半连接:

我们先来对比一下:

select a.* from t_a a  join t_b b on a.id = b.id

大数据学习之路35-hive的join_第7张图片

这里是查出左边的一半:

select a.* from t_a a left  semi join t_b b on a.id = b.id;

大数据学习之路35-hive的join_第8张图片

我们可以看到上面使用内连接查询左边的一半用了6.639秒,而使用半连接用时5.133秒效率明显提高了。

所以如果我们只想查询一半的数据可以使用semi半连接来提高mapreduce的效率。

这是为什么呢?因为如果我们使用内连接来查询一半的话,它会把两张表的数据都发送到reduce端做聚合,而使用semi半连接,则不会发送所有的数据。

不等值查询:

select a.*,b.* from t_a a  join t_b b on a.id > b.id;

大数据学习之路35-hive的join_第9张图片

select a.*,b.* from t_a a , t_b b where a.id > b.id;

 

大数据学习之路35-hive的join_第10张图片

在老版本中,不支持非等值的join

在1.2.1后都支持非等值join,不过写法应该如下:

select a.*,b.* from t_a a , t_b b where a.id > b.id;

不支持的语法:

select a.*,b.* from t_a a join t_b b on a.id > b.id;

 

你可能感兴趣的:(大数据)