简述Hive 的 join 有几种方式,怎么实现 join 的? ?

Hive中的join操作主要有以下几种方式:

  1. Common Join:也叫做shuffle join,reduce join操作。适用于两个table的大小相当,但是又不是很大的情况下使用。具体流程就是在map端进行数据的切分,一个block对应一个map操作,然后进行shuffle操作,把对应的block shuffle到reduce端去,再逐个进行联合。 缺点:容易产生数据倾斜,大数据量下性能不好。
  2. Map Join:当join的两个表是一个比较小的表和一个特别大的表的时候,把比较小的table直接放到内存中去,然后再对比较大的表格进行map操作。 join就发生在map操作的时候,每当扫描一个大的table中的数据,就要去查看小表的数据,哪条与之相符,继而进行连接。这里的join并不会涉及reduce操作。
  3. Bucket Map Join:是对Map Join的改进,打破了只适用于大表join小表的限制,可用于大表join大表的场景。核心思想是:若能保证参与join的表均为分桶表且关联字段是分桶字段,且一张表的分桶数量是另一张表的分桶数量的整数倍,就能保证参与join的两张表的分桶之间具有明确的关联关系,所以就可以在两表的分桶间进行Map Join。这样第二个job的Map端就无需缓存小表的全表数据了,而只需缓存其所需的分桶即可。
  4. Sort Merge Bucket Map Join(简称 SMB Map Join)基于 Bucket Map Join。SMB MapJoin 要求,参与 join 的表均为分桶表,且需保证分桶内的数据是有序的,且分桶字段、排序字段和关联字段为相同字段,且其中一张表的分桶数量是另外一张表分桶数量的整数q SMB Map Join同Bucket Join一样,同样是利用两表各分桶之间的关联关系,在分桶之间进行 join操作,不同的是,分桶之间的 join 操作的实现原理。Bucket Map Join,两个分桶之间的 join 实现原理为Hash Join算法;而SMB Map Join,两个分桶之间的 join实现原理为 Sort Merge Join 算法 Hash Join和 Sort Merge Join 均为关系型数据库中常见的Join 实现算法。

总的来说,Hive中的join操作可以通过多种方式实现,包括Common Join、Map Join、Bucket Map Join和Sort Merge Bucket Map Join等。不同的join方式适用于不同的场景和数据规模,可以根据实际需求选择适合的方式进行join操作。

发表评论

后才能评论