Hive优化器对于涉及分区表的连接表现不佳

时间:2014-02-27 11:00:18

标签: sql database hadoop hive bigdata

我正在使用Hive版本0.7.1-cdh3u2

我有两张大桌子(比方说)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的所有日期的A / 2014-02-25和所有hdfs目录,而不是仅针对特定日期(' 2014年2月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目录

我有以下问题。

  1. 不应该让优化器足够聪明,以便两个查询以完全相同的方式运行吗?
  2. 运行hive查询以使用多个密钥上的分区连接此类表的优化方法是什么?
  3. 在join on子句中使用涉及分区的条件和在性能方面的where子句之间有什么区别?

1 个答案:

答案 0 :(得分:4)

您需要在JOIN子句或WHERE子句中明确提及条件,即分区目录。因此它只会处理所需的分区,从而提高性能。

您可以参考此链接: Apache Hive LanguageManual