【发布时间】: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 目录
我有以下问题。
- hive 优化器不应该足够聪明,让两个查询以完全相同的方式运行吗?
- 运行 hive 查询以连接具有多个键上的分区的此类表的优化方法应该是什么?
- 在 join on 子句和 where 子句中使用涉及分区的条件在性能方面有什么区别?
【问题讨论】:
-
Hive 0.7.1 是非常旧的版本,请考虑升级并重试您的查询。
标签: sql database hadoop hive bigdata