HiveQL - Select-Joins

JOIN ist eine Klausel, die zum Kombinieren bestimmter Felder aus zwei Tabellen verwendet wird, indem Werte verwendet werden, die jedem gemeinsam sind. Es wird verwendet, um Datensätze aus zwei oder mehr Tabellen in der Datenbank zu kombinieren.

Syntax

join_table:

   table_reference JOIN table_factor [join_condition]
   | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference
   join_condition
   | table_reference LEFT SEMI JOIN table_reference join_condition
   | table_reference CROSS JOIN table_reference [join_condition]

Beispiel

In diesem Kapitel werden die folgenden zwei Tabellen verwendet. Betrachten Sie die folgende Tabelle mit dem Namen CUSTOMERS ..

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
| 1  | Ramesh   | 32  | Ahmedabad | 2000.00  |  
| 2  | Khilan   | 25  | Delhi     | 1500.00  |  
| 3  | kaushik  | 23  | Kota      | 2000.00  | 
| 4  | Chaitali | 25  | Mumbai    | 6500.00  | 
| 5  | Hardik   | 27  | Bhopal    | 8500.00  | 
| 6  | Komal    | 22  | MP        | 4500.00  | 
| 7  | Muffy    | 24  | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+

Betrachten Sie eine andere Tabelle ORDERS wie folgt:

+-----+---------------------+-------------+--------+ 
|OID  | DATE                | CUSTOMER_ID | AMOUNT | 
+-----+---------------------+-------------+--------+ 
| 102 | 2009-10-08 00:00:00 |           3 | 3000   | 
| 100 | 2009-10-08 00:00:00 |           3 | 1500   | 
| 101 | 2009-11-20 00:00:00 |           2 | 1560   | 
| 103 | 2008-05-20 00:00:00 |           4 | 2060   | 
+-----+---------------------+-------------+--------+

Es gibt verschiedene Arten von Verknüpfungen, die wie folgt angegeben werden:

  • JOIN
  • LINKE ÄUSSERE VERBINDUNG
  • RIGHT OUTER JOIN
  • VOLLSTÄNDIGER OUTER JOIN

BEITRETEN

Die JOIN-Klausel wird verwendet, um die Datensätze aus mehreren Tabellen zu kombinieren und abzurufen. JOIN ist dasselbe wie OUTER JOIN in SQL. Eine JOIN-Bedingung soll mit den Primärschlüsseln und Fremdschlüsseln der Tabellen ausgelöst werden.

Die folgende Abfrage führt JOIN für die Tabellen CUSTOMER und ORDER aus und ruft die Datensätze ab:

hive> SELECT c.ID, c.NAME, c.AGE, o.AMOUNT 
FROM CUSTOMERS c JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

Nach erfolgreicher Ausführung der Abfrage wird die folgende Antwort angezeigt:

+----+----------+-----+--------+ 
| ID | NAME     | AGE | AMOUNT | 
+----+----------+-----+--------+ 
| 3  | kaushik  | 23  | 3000   | 
| 3  | kaushik  | 23  | 1500   | 
| 2  | Khilan   | 25  | 1560   | 
| 4  | Chaitali | 25  | 2060   | 
+----+----------+-----+--------+

LINKE ÄUSSERE VERBINDUNG

Der HiveQL LEFT OUTER JOIN gibt alle Zeilen aus der linken Tabelle zurück, auch wenn die rechte Tabelle keine Übereinstimmungen enthält. Das heißt, wenn die ON-Klausel mit 0 (Null) Datensätzen in der rechten Tabelle übereinstimmt, gibt JOIN immer noch eine Zeile im Ergebnis zurück, jedoch mit NULL in jeder Spalte aus der rechten Tabelle.

Ein LEFT JOIN gibt alle Werte aus der linken Tabelle sowie die übereinstimmenden Werte aus der rechten Tabelle zurück oder NULL, wenn kein übereinstimmendes JOIN-Prädikat vorhanden ist.

Die folgende Abfrage zeigt LEFT OUTER JOIN zwischen den Tabellen CUSTOMER und ORDER:

hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE 
FROM CUSTOMERS c 
LEFT OUTER JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

Nach erfolgreicher Ausführung der Abfrage wird die folgende Antwort angezeigt:

+----+----------+--------+---------------------+ 
| ID | NAME     | AMOUNT | DATE                | 
+----+----------+--------+---------------------+ 
| 1  | Ramesh   | NULL   | NULL                | 
| 2  | Khilan   | 1560   | 2009-11-20 00:00:00 | 
| 3  | kaushik  | 3000   | 2009-10-08 00:00:00 | 
| 3  | kaushik  | 1500   | 2009-10-08 00:00:00 | 
| 4  | Chaitali | 2060   | 2008-05-20 00:00:00 | 
| 5  | Hardik   | NULL   | NULL                | 
| 6  | Komal    | NULL   | NULL                | 
| 7  | Muffy    | NULL   | NULL                | 
+----+----------+--------+---------------------+

RIGHT OUTER JOIN

Der HiveQL RIGHT OUTER JOIN gibt alle Zeilen aus der rechten Tabelle zurück, auch wenn die linke Tabelle keine Übereinstimmungen enthält. Wenn die ON-Klausel mit 0 (Null) Datensätzen in der linken Tabelle übereinstimmt, gibt JOIN immer noch eine Zeile im Ergebnis zurück, jedoch mit NULL in jeder Spalte aus der linken Tabelle.

Ein RIGHT JOIN gibt alle Werte aus der rechten Tabelle sowie die übereinstimmenden Werte aus der linken Tabelle zurück oder NULL, wenn kein übereinstimmendes Join-Prädikat vorhanden ist.

Die folgende Abfrage zeigt RIGHT OUTER JOIN zwischen den Tabellen CUSTOMER und ORDER.

notranslate "> hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE FROM CUSTOMERS c RIGHT OUTER JOIN ORDERS o ON (c.ID = o.CUSTOMER_ID);

Nach erfolgreicher Ausführung der Abfrage wird die folgende Antwort angezeigt:

+------+----------+--------+---------------------+ 
| ID   | NAME     | AMOUNT | DATE                | 
+------+----------+--------+---------------------+ 
| 3    | kaushik  | 3000   | 2009-10-08 00:00:00 | 
| 3    | kaushik  | 1500   | 2009-10-08 00:00:00 | 
| 2    | Khilan   | 1560   | 2009-11-20 00:00:00 | 
| 4    | Chaitali | 2060   | 2008-05-20 00:00:00 | 
+------+----------+--------+---------------------+

VOLLSTÄNDIGER OUTER JOIN

Der HiveQL FULL OUTER JOIN kombiniert die Datensätze der linken und rechten äußeren Tabelle, die die JOIN-Bedingung erfüllen. Die verknüpfte Tabelle enthält entweder alle Datensätze aus beiden Tabellen oder gibt NULL-Werte für fehlende Übereinstimmungen auf beiden Seiten ein.

Die folgende Abfrage zeigt FULL OUTER JOIN zwischen den Tabellen CUSTOMER und ORDER:

hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE 
FROM CUSTOMERS c 
FULL OUTER JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

Nach erfolgreicher Ausführung der Abfrage wird die folgende Antwort angezeigt:

+------+----------+--------+---------------------+ 
| ID   | NAME     | AMOUNT | DATE                | 
+------+----------+--------+---------------------+ 
| 1    | Ramesh   | NULL   | NULL                | 
| 2    | Khilan   | 1560   | 2009-11-20 00:00:00 | 
| 3    | kaushik  | 3000   | 2009-10-08 00:00:00 | 
| 3    | kaushik  | 1500   | 2009-10-08 00:00:00 | 
| 4    | Chaitali | 2060   | 2008-05-20 00:00:00 | 
| 5    | Hardik   | NULL   | NULL                | 
| 6    | Komal    | NULL   | NULL                |
| 7    | Muffy    | NULL   | NULL                |  
| 3    | kaushik  | 3000   | 2009-10-08 00:00:00 | 
| 3    | kaushik  | 1500   | 2009-10-08 00:00:00 | 
| 2    | Khilan   | 1560   | 2009-11-20 00:00:00 | 
| 4    | Chaitali | 2060   | 2008-05-20 00:00:00 | 
+------+----------+--------+---------------------+