【发布时间】:2013-10-24 21:54:07
【问题描述】:
“RIGHT OUTER JOIN”和“LEFT OUTER JOIN”在 HIVE 中的表现是否不同?
例如,表 A 是一个小表。表 B 更大,并且在 col2 上进行了分区。
查询 1:
SELECT *
FROM A RIGHT OUTER JOIN B on (A.col=B.col)
WHERE B.col2>20131001
查询 2:
SELECT *
FROM A LEFT OUTER JOIN B on (A.col=B.col)
WHERE B.col2>20131001
查询 1 只扫描了少量分区,但查询 2 扫描了表 B 的所有分区。是 bug 还是我遗漏了什么?
谢谢!
【问题讨论】:
-
您的意思是分区是由
col2(时间)和B.col2>20131001过滤器在第二种情况下不修剪分区?你能发布两人的 EXPLAIN 计划吗? -
您还应该阅读MapJoin & Partition Pruning,看看您的案例是否符合问题描述。