随着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!

09-26 18:26