技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> HIVE中MAPJOIN可以使用的场景分析

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

浏览:2045次  出处信息

    最近开发中遇到几种应用,刚好使用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. 如何获取hive建表语句    (阅读:6662)
  2. Hive源码解析-之-词法分析器 parser    (阅读:5691)
  3. HIVE中UDTF编写和使用    (阅读:5219)
  4. Hive的入口 -- Hive源码解析    (阅读:4677)
  5. Hive源码解析-之-语法解析器    (阅读:4118)
  6. 用hadoop hive协同scribe log用户行为分析方案    (阅读:4103)
  7. 几个HIVE的streaming    (阅读:3351)
  8. 写好Hive 程序的五个提示    (阅读:3149)
  9. Hive 随谈(一)    (阅读:2828)
  10. Impala与Hive的比较    (阅读:2788)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:挣值分析
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1