LEFT/RIGHT OUTER JOIN effectuer différemment dans la RUCHE?
Ne "JOINTURE EXTERNE DROITE" et "LEFT OUTER JOIN" effectuer différemment dans la RUCHE?
Par exemple, le Tableau A est une petite table. Le tableau B est beaucoup plus grand et partitionné sur col2.
Requête 1:
SELECT *
FROM A RIGHT OUTER JOIN B on (A.col=B.col)
WHERE B.col2>20131001
Requête 2:
SELECT *
FROM A LEFT OUTER JOIN B on (A.col=B.col)
WHERE B.col2>20131001
Requête 1 seulement de l'analyse d'un petit nombre de partitions, mais de la Requête 2 scans de toutes les partitions de la Table B. Est-ce un bug ou j'ai raté quelque chose?
Merci!
- Tu veux dire le partitionnement par le
col2
(temps) et de laB.col2>20131001
filtre de ne pas tailler les partitions sur le deuxième cas? Pouvez-vous poster les plans d'explication pour les deux? - Vous devriez également lire MapJoin & Partition Élagage et de voir si votre cas correspond à la description du problème.
- Double Possible de Quelle est la différence entre "INNER JOIN" et "OUTER JOIN"?
Vous devez vous connecter pour publier un commentaire.
J'ai vécu la même chose (je ne sais pas pourquoi cela, bug ou une fonctionnalité. je ne considère pas cela vraiment comme un bug). Depuis jointure externe gauche est fortement utilisé par moi, j'utilise la solution de contournement suivante:
ou
Je suis en train de travailler sur la Ruche 0.11 ... ce serait intéressant si c'est corrigé dans les versions ultérieures.
Requête 1 de la table B est conservé table de sorte que B est où le prédicat est le refoulement.
Requête 2 tableau B n'est pas conservé le tableau B est où le prédicat ne refoulement.hive
analyser l'intégralité du tableau B
voir ce pour plus de détail OuterJoinBehavior