HIVE中MAPJOIN可以使用的场景分析
浏览:2075次 出处信息
最近开发中遇到几种应用,刚好使用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
建议继续学习:
- 如何获取hive建表语句 (阅读:6686)
- Hive源码解析-之-词法分析器 parser (阅读:5787)
- HIVE中UDTF编写和使用 (阅读:5266)
- Hive的入口 -- Hive源码解析 (阅读:4778)
- Hive源码解析-之-语法解析器 (阅读:4259)
- 用hadoop hive协同scribe log用户行为分析方案 (阅读:4136)
- 几个HIVE的streaming (阅读:3402)
- 写好Hive 程序的五个提示 (阅读:3170)
- Impala与Hive的比较 (阅读:2927)
- Hive 随谈(一) (阅读:2845)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:挣值分析
后一篇:使用 luajit 的 ffi 绑定 zeromq >>
文章信息
- 作者:shicheng 来源: 量子数科院
- 标签: HIVE MAPJOIN
- 发布时间:2011-08-22 12:21:39
建议继续学习
近3天十大热文
- [66] Oracle MTS模式下 进程地址与会话信
- [66] Go Reflect 性能
- [65] 如何拿下简短的域名
- [59] android 开发入门
- [59] 图书馆的世界纪录
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则