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