设为首页 加入收藏

TOP

HiveJoin(三)
2015-11-21 01:41:42 来源: 作者: 【 】 浏览:7
Tags:HiveJoin
OIN列同时也是BUCKET列,JOIN语句如下:
SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a JOIN b ON a.key = b.key;
 
JOIN的过程是,表a的BUCKET 1只会与表b中的BUCKET 1进行JOIN,而不再考虑表b中的其他BUCKET 2~36。
如果上述表具有相同的BUCKET,如都是36个,而且还是排序的,即,在表定义中在CLUSTERED BY(key)后面增加如下约束:
SORTED BY(key)
则上述JOIN语句会执行一个Sort-Merge-Bucket (SMB) JOIN,同样需要设置如下参数来改变默认行为,优化JOIN时只遍历相关的BUCKET即可:
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
set hive.optimize.bucketmapjoin = true;
set hive.optimize.bucketmapjoin.sortedmerge = true;
 
上面三个参数默认值为:
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
hive.optimize.bucketmapjoin=false
hive.optimize.bucketmapjoin.sortedmerge=false;

10) MapJoin Restrictions

SELECT/*+ MAPJOIN(b) */ a.key, a.value

FROMa JOIN b ON a.key = b.key;

不需要reducer,对于表A的每个mapper,可以完全读取表B。

下面列出的都是MapJoin不支持的:

?UnionFollowed by a MapJoin

?LateralView Followed by a MapJoin

?ReduceSink (Group By/Join/Sort By/Cluster By/Distribute By) Followed by MapJoin

?MapJoinFollowed by Union

?MapJoinFollowed by Join

?MapJoinFollowed by MapJoin

配置参数hive.auto.convert.join=true,如果可能的话,自动将joins转换为mapjoins,它应该取代使用mapjoinhint。

下面的查询应该使用mapjoinhint:

如果所有的inputs都被bucketed或者sorted,并且join应该被转换为bucketizedmap-size join或者bucketized-mergejoin。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hibernate关联映射 下一篇存储和文件管理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: