【问题标题】:Hive optimizer not performing well for joins involving partitioned tablesHive 优化器对于涉及分区表的连接表现不佳
【发布时间】:2014-03-30 18:16:14
【问题描述】:

我正在使用 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/2014-02-25 以及 B 的所有日期的所有 hdfs 目录,而不仅仅是特定日期(' 2014 年 2 月 25 日')。这需要大量时间和更多的 reduce 任务。

我也试过

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

【问题讨论】:

  • Hive 0.7.1 是非常旧的版本,请考虑升级并重试您的查询。

标签: sql database hadoop hive bigdata


【解决方案1】:

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

你可以参考这个链接: Apache Hive LanguageManual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多