开发者社区> 问答> 正文

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

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

展开
收起
芯在这 2021-12-06 00:09:23 594 0
1 条回答
写回答
取消 提交回答
  • 3 种 join 方式:

    1)在 reduce 端进行 join,最常用的 join 方式。

    Map端的主要工作:为来自不同表(文件)的 key/value 对打标签以区别不同来源的记录。然后用连接字段作为 key,其余部分和新加的标志作为 value,最后进行输出。

    reduce端的主要工作:在reduce 端以连接字段作为key 的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录 (在 map 阶段已经打标志)分开,最后进行笛卡尔。

    2)在 map 端进行 join,使用场景:一张表十分小、一张表很大:

    在提交作业的时候先将小表文件放到该作业的 DistributedCache 中,然后从 DistributeCache 中取出该小表进行 join key / value 解释分割放到内存中(可以放大 Hash Map 等等容器中)。然后扫描大表,看大表中的每条记录的 join key /value 值是否能够在内存中找到相同 join key 的记录,如果有则直接输出结果

    3)SemiJoin,semijoin 就是左边连接是 reducejoin 的一种变种,在 map 端过滤掉一些数

    据,在网络传输过程中,只传输参与连接的数据,减少了 shuffle的网络传输量,其他和 reduce 的思想是一样的。

    2021-12-06 00:09:43
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Hive Bucketing in Apache Spark 立即下载
spark替代HIVE实现ETL作业 立即下载
2019大数据技术公开课第五季—Hive迁移到MaxCompute最佳实践 立即下载