Hadoop HiveQL查询性能优化

Hadoop HiveQL查询性能优化,hadoop,hive,sqoop,hiveql,Hadoop,Hive,Sqoop,Hiveql,随着配置单元查询中的联接数量的增加,查询将分多个阶段运行,并占用大量执行时间。如何提高查询性能。是否要设置任何参数?所有大型表中的第一个应按联接顺序放置为最后一个: 选择小的,大的。从小到大 将大的连接到小的上。joinkey=large.joinkey; 您可以使用提示告诉optimazier哪个表最大: SELECT/*+ STREAMTABLE(large) */ small.*, large.* FROM large JOIN small ON small.joinkey=large.j

随着配置单元查询中的联接数量的增加,查询将分多个阶段运行,并占用大量执行时间。如何提高查询性能。是否要设置任何参数?

所有大型表中的第一个应按联接顺序放置为最后一个: 选择小的,大的。从小到大 将大的连接到小的上。joinkey=large.joinkey; 您可以使用提示告诉optimazier哪个表最大:

SELECT/*+ STREAMTABLE(large) */ small.*, large.* FROM large
JOIN small ON small.joinkey=large.joinkey;
其次,小表可以通过映射端连接缓存在内存中:

set hive.auto.convert.join = true;
SELECT a.*, b.* FROM a
JOIN b ON a.joinkey=b.joinkey;
映射联接表的大小由以下各项设置:

set hive.mapjoin.smalltable.filesize = 1000000; 

我希望这能有点帮助。德国劳埃德船级社

所有大型表中的第一个表应按联接顺序作为最后一个表放置: 选择小的,大的。从小到大 将大的连接到小的上。joinkey=large.joinkey; 您可以使用提示告诉optimazier哪个表最大:

SELECT/*+ STREAMTABLE(large) */ small.*, large.* FROM large
JOIN small ON small.joinkey=large.joinkey;
其次,小表可以通过映射端连接缓存在内存中:

set hive.auto.convert.join = true;
SELECT a.*, b.* FROM a
JOIN b ON a.joinkey=b.joinkey;
映射联接表的大小由以下各项设置:

set hive.mapjoin.smalltable.filesize = 1000000; 

我希望这能有点帮助。德国劳埃德船级社

当查询的SELECT或WHERE子句不引用右表时,除了上述情况外,最好使用左半联接


半联接比更一般的内部联接更有效的原因如下。对于左手表中的给定记录,只要找到任何匹配项,配置单元就可以停止在右手表中查找匹配的记录。此时,当查询的SELECT或WHERE子句不引用右表时,除了上述列之外,还可以投影左手表记录中选定的列,使用左半联接总是很好的

set hive.exec.parallel = True
半联接比更一般的内部联接更有效的原因如下。对于左手表中的给定记录,只要找到任何匹配项,配置单元就可以停止在右手表中查找匹配的记录。此时,可以投影左侧表记录中选定的列

set hive.exec.parallel = True
这是一般性的,使用适当的set命令,我们可以根据集群配置优化查询

这是一般性的,使用适当的set命令,我们可以根据集群配置优化查询