Hive拥有多种join算法
包括Common Join,Map Join,Bucket Map Join,Sort Merge Buckt Map Join等
Common Join
Hive中最稳定的join算法,其通过一个MapReduce Job完成一个join操作。
Map端负责读取join操作所需表的数据,并按照关联字段进行分区
通过Shuffle,将其发送到Reduce端,相同key的数据在Reduce端完成最终的Join操作
注意
sql语句中的join操作和执行计划中的Common Join任务并非一对一的关系
一个sql语句中的相邻的且关联字段相同的多个join操作可以合并为一个Common Join任务。
-- 关联字段相同
hive (default)>
select
a.val,
b.val,
c.val
from a
join b on (a.key = b.key1)
join c on (c.key = b.key1)
上述sql语句中两个join操作的关联字段均为b表的key1字段,则该语句中的两个join操作可由一个CommonJoin任务实现,也就是可通过一个Map Reduce任务实现。
-- 关联字段不一样
hive (default)>
select
a.val,
b.val,
c.val
from a
join b on (a.key = b.key1)
join c on (c.key = b.key2)
上述sql语句中的两个join操作关联字段各不相同,则该语句的两个join操作需要各自通过一个Common Join任务实现,也就是通过两个Map Reduce任务实现。