随着Hive查询中JOINS数量的增加,查询分多个阶段运行,占用了大量的执行时间。如何提高查询性能。是否有需要设置的参数?
发布于 2013-04-08 22:55:31
首先,大表应该放在联接顺序的最后一个: SELECT small.,large。FROM small JOIN large ON small.joinkey=large.joinkey;您可以使用提示告诉optimazier哪个表是最大的:
SELECT/*+ STREAMTABLE(large) */ small.*, large.* FROM large
JOIN small ON small.joinkey=large.joinkey;其次,可以通过Map-side join在连接时将较小的表缓存到内存中:
set hive.auto.convert.join = true;
SELECT a.*, b.* FROM a
JOIN b ON a.joinkey=b.joinkey;map-join表的大小由以下设置:
set hive.mapjoin.smalltable.filesize = 1000000; 我希望这会有一点帮助。GL!
发布于 2013-08-08 18:34:00
当查询的SELECT或WHERE子句没有引用右表时,除了上述情况外,最好使用left semi join。
半连接比更通用的内连接更有效的原因如下。对于左表中的给定记录,一旦找到匹配记录,Hive就可以停止在右表中查找匹配记录。此时,可以投影从左侧表记录中选择的列
发布于 2017-09-14 19:43:04
set hive.exec.parallel = True这是通用的,使用适当的set命令,我们可以根据您的集群配置优化查询。
https://stackoverflow.com/questions/15674326
复制相似问题