Bucket Join:分桶Join
-
场景:大表join大表,多次join
-
实现
- step1:将两张大表的数据构建分桶
- 数据按照分桶的规则拆分到不同的文件中
- 分桶规则=MapReduce分区的规则=key的hash取余
- key=分桶的字段
- step2:只要实现桶与桶的join,减少了比较次数
- 分桶本质:低层MapReduce的分区,桶的个数=Reduce个数=文件个数
- step1:将两张大表的数据构建分桶
-
分类
-
Bucket Map Join :普通的分桶Join
-
桶内的没一条 数据要与对方桶的每一条数据进行join比较
-
要求:
-
两张表是桶表,桶的个数必须成倍数
create table tbname( ) clusterd by (分桶的字段) into N bucket;
-
分桶的字段=join的字段
-
必须开启Map Join
-
-
-
Sort Merge Bucket Map Join:每个桶内有序的join
-
只要桶内的下一条不是,就不用再比较了
-
要求
-
两张表必须是桶表,桶的个数必须相同
create table tbname( ) clusterd by (分桶的字段) sorted by (分桶的字段) into N bucket;
-
分桶的字段=排序的字段=join的字段
-
必须开启Map Join
-
-
-