我使用的是hive版本0.7.1-cdh3u2
我有两张大table(比方说)a和b,都是按天划分的。我正在运行以下查询
select col1,col2
from A join B on (A.day=B.day and A.key=B.key)
where A.day='2014-02-25'
当我查看map reduce任务的xml文件时,我发现mapred.input.dir包含a/2014-02-25和b的所有天的所有hdfs目录,而不仅仅是特定的一天(“2014-02-25”)。这需要大量的时间和更多的任务。
我也试着用
select col1,col2
from A join B on (A.day=B.day and A.key=B.key and A.day='2014-02-25'
and B.day='2014-02-25')
这个查询执行得更快,而且只在mapred.input.dir中使用了所需的hdfs目录
我有以下问题。
配置单元优化器是否应该足够聪明,以便两个查询以完全相同的方式运行?
运行配置单元查询以将这些表与多个键上的分区连接起来,应该采用什么优化方法?
在join on子句和where子句中使用涉及分区的条件在性能方面有什么区别?
1条答案
按热度按时间holgip5t1#
您需要在join子句或where子句中显式地提到分区目录。因此,它将只处理所需的分区,从而提高性能。
您可以参考以下链接:apachehive languagemanual