方法一
set hive.auto.convert.join = true; --是否开自动mapjoin
set hive.mapjoin.smalltable.filesize; --mapjoin的表size大小
以上两个参数同时使用,在hive.auto.convert.join为true时,只要小表size小于hive.mapjoin.smalltable.filesize的设置值,并且小表不是关联操作的最后一张表,小表就会走mapjoin。
set hive.auto.convert.join = true;
set hive.mapjoin.smalltable.filesize = 6250000;
select * from table_1 --小表,size 5m
join table_2
on 1=1;
方法二
set hive.ignore.mapjoin.hint; --true 注释方式不生效 false 注释方式生效 强行指定需要加入内存走mapjoin的表
set hive.ignore.mapjoin.hint=true;
select /*+ mapjoin(table_1) */
*
from table_2
join table_1 --小表,size 5m
on 1=1;
如果mapjoin生效会在mr日志中看到以下打印日志

本文介绍了两种在Hive中优化查询性能的方法:通过设置参数hive.auto.convert.join和hive.mapjoin.smalltable.filesize实现自动MapJoin;以及使用注释方式指定特定表进行MapJoin,即使在hive.ignore.mapjoin.hint为true的情况下也能生效。正确应用MapJoin可以显著减少shuffle阶段的数据传输,提高查询效率。
1167

被折叠的 条评论
为什么被折叠?



