Hive任务优化(2)

JOIN优化

1.大多数情况下,Hive会对每对Join连接对象启动一个MapReduce任务。

2.多表关联时,如果每个ON子句都使用相同的连接键的话,那么只会产生一个MapReduce Job。

3.Hive总是按照从左到右的顺序执行。Hive会假定最后一张表是最大的表,在对每行记录进行连接操作时,它会将其他表进行缓存,然后扫描最后那个表进行计算。因此一般将最大表放置最后关联。也可以提供标记,显式告知最大表

/*+STREAMTABLE(s)*/
SELECT /*+STREAMTABLE(s)*/ s.ymd,s.symbol,s.price_close,d.dividend FROM stock s JOIN dividends d  ON s.ymd=d.ymd AND s.symbol=d.symbol WHERE s.symbol='APPL'

4.map-side join

如果所有表中只有一张表是小表,可以在最大表通过mapper的时候将小表放入内存中。

/*+MAPJOIN(d)*/

原文地址:https://www.cnblogs.com/Dhouse/p/7159349.html