【SQL优化】Hive的三种连接方式-ReduceJoin、MapJoin、Sort Merge Bucket Join


前言

在进行表连接上根据情景的不同选择不同的连接方式也是一种sql的优化。


一、ReduceJoin(Common Join/Shuffle Join)

1、工作原理:

在 Map 阶段,读取表数据并根据连接键进行分区和排序。 在 Shuffle 阶段,将具有相同连接键的记录发送到同一个 Reduce 任务。
在 Reduce 阶段,对来自不同表的具有相同连接键的记录进行连接操作,生成最终结果。

2、特点:

适用于大规模数据的连接操作,但由于涉及到数据的 Shuffle 过程,可能会导致较高的网络开销和性能瓶颈,尤其是当连接键的分布不均匀时。

3、适用场景:

当两个连接的表都比较大,且没有明显的大小差异时,ReduceJoin 是一种较为通用的选择。
如果数据分布相对均匀,且集群资源能够承受 Shuffle 过程带来的开销,ReduceJoin 可以有效地处理连接操作。

二、MapJoin

1、工作原理:

在 Map 阶段,将小表加载到内存中。 对于每个 Map 任务处理的大表数据,直接在内存中与小表进行连接操作,无需经过 Shuffle 和 Reduce 阶段。

2、特点:

适用于一个表非常小而另一个表非常大的场景,可以大大提高连接操作的性能,避免了数据的 Shuffle 过程。
要求小表能够完全加载到内存中,否则可能会导致内存溢出。

3、适用场景:

一个表非常小(可以完全加载到内存中),另一个表非常大的场景。例如,一个包含产品信息的小表和一个包含大量销售记录的大表进行连接。
当需要快速连接两个表,且小表的内容相对稳定时,MapJoin 可以显著提高性能。
对于一次性的临时查询或者数据探索性分析,MapJoin 可以快速得到结果。

三、Sort Merge Bucket Join(分桶表 Join)

1、工作原理:

首先,对要连接的表进行分桶操作,确保连接键的值在相同桶中的数据具有相同的哈希值。
在连接操作时,只需要对具有相同桶编号的桶进行连接操作,而不是对整个表进行连接。

2、特点:

可以大大减少连接操作的数据量,提高性能。
要求连接的表在连接键上进行了相同的分桶操作,并且分桶数量和分桶方式要匹配。

3、适用场景:

处理大规模数据且连接键上的数据分布具有一定规律时。例如,当连接键的值具有较高的基数(即不同的值很多),并且数据可以通过分桶进行有效划分。
对于经常进行连接操作的表,提前进行分桶处理可以提高后续连接操作的性能。
当需要对数据进行高效的并行处理时,分桶表 Join 可以充分利用 Hive 的并行计算能力。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值