RIGHT / LEFT OUTER JOIN在HIVE中表现不同?

时间:2013-10-24 21:54:07

标签: join hive

“正确的外部联接”和“左外联合”在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的所有分区。这是一个错误还是我错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

我经历了同样的事情(不知道为什么这个,错误或功能。我会认为这肯定是一个错误)。由于左外连接被我大量使用,我使用以下解决方法:

SELECT *
FROM A
LEFT OUTER JOIN
  (SELECT *
   FROM B
   WHERE B.COL2 >20131001) ON (A.COL=B.COL)

SELECT *
FROM A
LEFT OUTER JOIN B ON (A.COL= B.COL
                      AND B.COL2 > 20131001)

我正在研究Hive 0.11 ......如果在以后的版本中修复它会很有趣。

答案 1 :(得分:0)

查询1表B是保留表,因此B是谓词是下推的。

查询2表B不是保留表,因此B的谓词不会pushdown.hive 扫描整个表B

详情请见OuterJoinBehavior