hive优化器在涉及分区表的联接中执行得不好

qjp7pelc  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(320)

我使用的是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子句中使用涉及分区的条件在性能方面有什么区别?

holgip5t

holgip5t1#

您需要在join子句或where子句中显式地提到分区目录。因此,它将只处理所需的分区,从而提高性能。
您可以参考以下链接:apachehive languagemanual

相关问题