页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

 

最近开发中遇到几种应用,刚好使用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操作,效率还会有很大的提升。

问题解决~~

示例代码如下:

drop table student;
  create table student (
  name string
);
drop table school;;
  create table school (
  name string
);
insert into school values ("dddd");
insert into student values ("dddd-xxxxx");

select /*+ MAPJOIN(a) */
a.name, b.name
from school a
join (select * from student) b
where instr(b.name, a.name) > 0;


  • 无标签