-1

HIVE では、「RIGHT OUTER JOIN」と「LEFT OUTER JOIN」のパフォーマンスは異なりますか?

たとえば、テーブル 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 のすべてのパーティションをスキャンします。

ありがとう!

4

2 に答える 2

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に取り組んでいます...これが後のバージョンで修正されれば興味深いでしょう。

于 2014-07-16T08:50:56.177 に答える
0

クエリ 1 テーブル B は保持テーブルなので、B の述語はプッシュダウンです。

クエリ 2 テーブル B は保持テーブルではないため、述語がプッシュダウンされない B はテーブル B 全体をスキャンします。

詳細については、これを参照してください

于 2014-07-25T01:42:46.043 に答える