RECHTS - /LINKS-OUTER-JOIN durchführen, anders als im BIENENSTOCK?
Bedeutet "RIGHT OUTER JOIN" und "LEFT OUTER JOIN" führen anders in HIVE?
Beispielsweise Eine Tabelle ist eine kleine Tabelle. Tabelle B ist viel größer und partitioniert auf col2.
Query 1:
SELECT *
FROM A RIGHT OUTER JOIN B on (A.col=B.col)
WHERE B.col2>20131001
Abfrage 2:
SELECT *
FROM A LEFT OUTER JOIN B on (A.col=B.col)
WHERE B.col2>20131001
Abfrage 1 nur scannt eine kleine Anzahl von Partitionen, aber die Abfrage 2 durchsucht alle Partitionen der Tabelle B. Ist es ein bug oder habe ich etwas übersehen?
Dank!
- Du meinst partitionieren ist durch die
col2
(Zeit) und dieB.col2>20131001
filter nicht beschneiden Partitionen auf den zweiten Fall? Kannst du die ERKLÄREN, Pläne für die beiden? - Lesen Sie auch MapJoin & Partition Pruning und sehen, ob dein Fall passt die Beschreibung des Problems.
- Möglich, Duplikat der Was ist der Unterschied zwischen "INNER JOIN" und "OUTER JOIN"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich das gleiche erlebt haben (weiß nicht, warum dieser bug oder feature. ich würde dies definitiv als bug). Da left outer join ist stark von mir benutzt wird, verwende ich folgenden workaround:
oder
Arbeite ich auf Hive 0.11 ... wäre interessant, wenn diese behoben wird, die in späteren Versionen.
Abfrage 1 Tabelle B erhaltenen Tisch, so B, wo Prädikat abdrücken.
Abfrage 2 Tabelle B ist nicht erhalten-Tabelle, so dass B ' s, wo Prädikat wird nicht abdrücken.hive wird
Scannen der gesamten Tabelle B
sehen dies für mehr Details OuterJoinBehavior