随着Hive查询中JOINS数量的增加,查询正在多个阶段运行,并花费大量执行时间。如何提高查询性能。是否有任何参数需要设置?
最佳答案
首先,大表应按连接顺序放在最后一个表中:
选择小,大。从小
JOIN large ON small.joinkey = large.joinkey;
您可以使用提示告诉optimazier哪个表最大:
SELECT/*+ STREAMTABLE(large) */ small.*, large.* FROM large
JOIN small ON small.joinkey=large.joinkey;
其次,小表可以通过Map端连接在连接时缓存在内存中:
set hive.auto.convert.join = true;
SELECT a.*, b.* FROM a
JOIN b ON a.joinkey=b.joinkey;
映射联接表的大小由以下方式设置:
set hive.mapjoin.smalltable.filesize = 1000000;
希望对您有所帮助。 GL!