IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

HIVE中MAPJOIN可以使用的场景分析

量子数科院 2011-08-22 12:21:39 累计浏览 2,670 次
本机暂存

    最近开发中遇到几种应用,刚好使用MAPJOIN来解决实际的问题。

    应用共同点如下:

    1: 有一个极小的表<1000

    2: 需要做不等值join操作(a.x < b.y 或者 a.x like b.y等)

    这种操作如果直接使用join的话语法不支持不等于操作,hive语法解析会直接抛出错误

    如果把不等于写到where里会造成笛卡尔积,数据异常增大,速度会很慢。甚至会任务无法跑成功~

    根据mapjoin的计算原理,MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配。这种情况下即使笛卡尔积也不会对任务运行速度造成太大的效率影响。

    而且hive的where条件本身就是在map阶段进行的操作,所以在where里写入不等值比对的话,也不会造成额外负担。

    如此看来,使用MAPJOIN开发的程序仅仅使用map一个过程就可以完成不等值join操作,效率还会有很大的提升。

    问题解决~~

    示例代码如下:

   1: select /*+ MAPJOIN(a) */
   2: a.start_level, b.*
   3: from dim_level a
   4: join (select * from test) b
   5: where b.xx>=a.start_level and b.xx

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,397)
  2. 如何查找消耗资源较大的SQL (累计阅读 15,209)
  3. 其实,文件也可以truncate (累计阅读 8,573)
  4. MariaDB常见问题FAQ (累计阅读 8,342)
  5. SQL vs NoSQL:数据库并发写入性能比拼 (累计阅读 8,001)
  6. Mysql的随机读取 (累计阅读 7,861)
  7. 索引与优化like查询 (累计阅读 7,337)
  8. 如何获取hive建表语句 (累计阅读 7,179)
  9. Hive源码解析-之-词法分析器 parser (累计阅读 7,091)
  10. 在百度的第一年 (累计阅读 6,921)