文档章节

Hive 中 Map Join 的适用场景:非等值连接

大数据之路
 大数据之路
发布于 2012/12/26 03:42
字数 400
阅读 5159
收藏 1

最近开发中遇到几种应用,刚好使用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<end_level;


from: http://blog.linezing.com/2011/06/hive%E4%B8%ADmapjoin%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%9A%84%E5%9C%BA%E6%99%AF%E5%88%86%E6%9E%90

推荐阅读:

Hive 随谈(四)– Hive QL

http://www.alidata.org/archives/581

hive使用经验

http://www.docin.com/p-150084947.html


本文转载自:http://blog.linezing.com/2011/06/hive%E4%B8%ADmapjoin%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%9A%8...

大数据之路
粉丝 1605
博文 514
码字总数 333996
作品 0
武汉
架构师
私信 提问
Hive中的所有Join

内连接:inner join --join优化:在进行join的时候,大表放在最后面 --但是使用 /+streamtable(大表名称)/ 来标记大表,那么大表放在什么位置都行了 select /+streamtable(s)/ s.ymd,d.divid...

qhaiyan
2016/12/03
24
0
一例 Hive join 优化实战

由于 hive 与传统关系型数据库面对的业务场景及底层技术架构都有着很大差异,因此,传统数据库领域的一些技能放到 Hive 中可能已不再适用。关于 hive 的优化与原理、应用的文章,前面也陆陆续...

大数据之路
2014/08/29
11.5K
2
hive的join操作

hive的join操作 Join的语法规则: www.2cto.com join_table: table_reference JOIN table_factor [join_condition] table_reference {LEFT RIGHT FULL} [OUTER] JOIN table_reference join_......

Zero零_度
2016/10/13
5
0
hive中的mapjoin

今天遇到一个hive的问题,如下hive sql: select f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802) 该语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,...

张欢19933
2016/09/19
126
0
Hive学习总结之四:HiveQL查询操作

第三部分:HiveQL 查询操作 Hive的SQL操作 •基本的Select 操作 SELECT [ALL | DISTINCT] select_expr, select_expr, … FROM table_reference [WHERE where_condition] [GROUP BY col_list ......

酷帅CoolBash
2013/01/30
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

ES6

ES6:不改变原理的基础上,让API变得更简单 一、let:代替var用于声明变量 1、var的缺点: (1)声明提前 (2)没有块级作用域 2、let的优点: (1)组织了申明提前 (2)让let所在的块({}),...

wytao1995
今天
3
0
kubernetes 环境搭建 —— minikube

创建集群 minikube start 搭建好 k8s 集群后,可以查看集群的状态以及部署应用。主要用到的是 k8s 的 api,这通常需借助于 kutectl 命令行工具 基本操作 kubectl versionkubectl cluster-i...

lemos
今天
9
0
关于js混淆与反混淆还原操作

使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密,或者混淆js来达到代码保护。 1、为什么...

开源oschina
今天
11
0
用盛金公式解三次方程(ansi c版)

/* cc cubic.c -lm gcc cubic.c -lm Shengjin's Formulas Univariate cubic equation aX ^ 3 + bX ^ 2 + cX + d = 0, (a, b, c, d < R, and a!= 0). Multiple root disc......

wangxuwei
今天
9
0
JBolt开发平台入门(16)- 弹出Dialog显示指定区域的html内容

在JBolt里,有个主从表Demo。 子表中除了普通的table显示,还有其它从表显示形式 比如下方案例:是针对一个升级管理子表中存放版本的changelog富文本信息。 需求是点击左上角的弹出查看按钮,...

山东-小木
今天
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部