HiveQL - Select-Joins
JOIN adalah klausa yang digunakan untuk menggabungkan bidang tertentu dari dua tabel dengan menggunakan nilai yang sama untuk masing-masing. Ini digunakan untuk menggabungkan rekaman dari dua atau lebih tabel dalam database.
Sintaksis
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]
Contoh
Kami akan menggunakan dua tabel berikut dalam bab ini. Perhatikan tabel berikut bernama 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 |
+----+----------+-----+-----------+----------+
Pertimbangkan tabel ORDERS lain sebagai berikut:
+-----+---------------------+-------------+--------+
|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 |
+-----+---------------------+-------------+--------+
Ada berbagai jenis gabungan yang diberikan sebagai berikut:
- JOIN
- LEFT OUTER GABUNG
- KANAN OUTER GABUNG
- FULL OUTER JOIN
IKUTI
Klausa JOIN digunakan untuk menggabungkan dan mengambil rekaman dari beberapa tabel. JOIN sama dengan OUTER JOIN di SQL. Kondisi JOIN akan dimunculkan menggunakan kunci primer dan kunci asing dari tabel.
Kueri berikut menjalankan JOIN pada tabel CUSTOMER dan ORDER, dan mengambil record:
hive> SELECT c.ID, c.NAME, c.AGE, o.AMOUNT
FROM CUSTOMERS c JOIN ORDERS o
ON (c.ID = o.CUSTOMER_ID);
Saat eksekusi kueri berhasil, Anda akan melihat respons berikut:
+----+----------+-----+--------+
| ID | NAME | AGE | AMOUNT |
+----+----------+-----+--------+
| 3 | kaushik | 23 | 3000 |
| 3 | kaushik | 23 | 1500 |
| 2 | Khilan | 25 | 1560 |
| 4 | Chaitali | 25 | 2060 |
+----+----------+-----+--------+
LEFT OUTER GABUNG
HiveQL LEFT OUTER JOIN mengembalikan semua baris dari tabel kiri, bahkan jika tidak ada kecocokan di tabel kanan. Ini berarti, jika klausa ON cocok dengan 0 (nol) record di tabel kanan, JOIN masih mengembalikan satu baris di hasil, tetapi dengan NULL di setiap kolom dari tabel kanan.
LEFT JOIN mengembalikan semua nilai dari tabel kiri, ditambah nilai yang cocok dari tabel kanan, atau NULL jika tidak ada predikat JOIN yang cocok.
Kueri berikut menunjukkan LEFT OUTER JOIN antara tabel CUSTOMER dan 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);
Saat eksekusi kueri berhasil, Anda akan melihat respons berikut:
+----+----------+--------+---------------------+
| 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 |
+----+----------+--------+---------------------+
KANAN OUTER GABUNG
HiveQL RIGHT OUTER JOIN mengembalikan semua baris dari tabel kanan, bahkan jika tidak ada kecocokan di tabel kiri. Jika klausa ON cocok dengan 0 (nol) record di tabel kiri, JOIN masih mengembalikan satu baris di hasil, tapi dengan NULL di setiap kolom dari tabel kiri.
A RIGHT JOIN mengembalikan semua nilai dari tabel kanan, ditambah nilai yang cocok dari tabel kiri, atau NULL jika tidak ada predikat join yang cocok.
Kueri berikut menunjukkan RIGHT OUTER JOIN antara tabel CUSTOMER dan ORDER.
notranslate "> sarang> PILIH c.ID, c.NAME, o.AMOUNT, o.TANGGAL DARI PELANGGAN c KANAN OUTER GABUNG ORDER o ON (c.ID = o.CUSTOMER_ID);Saat eksekusi kueri berhasil, Anda akan melihat respons berikut:
+------+----------+--------+---------------------+
| 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 |
+------+----------+--------+---------------------+
FULL OUTER JOIN
HiveQL FULL OUTER JOIN menggabungkan catatan tabel luar kiri dan kanan yang memenuhi kondisi JOIN. Tabel yang digabungkan berisi semua rekaman dari kedua tabel, atau mengisi nilai NULL untuk kecocokan yang hilang di kedua sisi.
Kueri berikut menunjukkan FULL OUTER JOIN antara tabel CUSTOMER dan 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);
Saat eksekusi kueri berhasil, Anda akan melihat respons berikut:
+------+----------+--------+---------------------+
| 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 |
+------+----------+--------+---------------------+