HiveQL - Seç-Birleştir

JOIN, her biri için ortak olan değerleri kullanarak iki tablodaki belirli alanları birleştirmek için kullanılan bir cümledir. Veritabanındaki iki veya daha fazla tablodan kayıtları birleştirmek için kullanılır.

Sözdizimi

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]

Misal

Bu bölümde aşağıdaki iki tabloyu kullanacağız. MÜŞTERİLER adlı aşağıdaki tabloyu düşünün ..

+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+

Aşağıdaki gibi başka bir tablo SİPARİŞLERİ düşünün:

+-----+---------------------+-------------+--------+ 
|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   | 
+-----+---------------------+-------------+--------+

Aşağıdaki gibi verilen farklı birleştirme türleri vardır:

  • JOIN
  • SOL DIŞ KATILMA
  • RIGHT OUTER JOIN
  • TAM DIŞ KATILIM

KATILMAK

JOIN yan tümcesi, kayıtları birden çok tablodan birleştirmek ve almak için kullanılır. JOIN, SQL'deki OUTER JOIN ile aynıdır. Bir JOIN koşulu, tabloların birincil anahtarları ve yabancı anahtarları kullanılarak oluşturulmalıdır.

Aşağıdaki sorgu, MÜŞTERİ ve SİPARİŞ tablolarında JOIN'i yürütür ve kayıtları alır:

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

Sorgunun başarıyla yürütülmesi üzerine aşağıdaki yanıtı görürsünüz:

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

SOL DIŞ KATILMA

HiveQL LEFT OUTER JOIN, sağdaki tabloda hiç eşleşme olmasa bile soldaki tablodaki tüm satırları döndürür. Bunun anlamı, ON deyimi sağ tablodaki 0 ​​(sıfır) kayıtla eşleşirse, JOIN yine de sonuçta bir satır döndürür, ancak sağ tablodaki her sütunda NULL bulunur.

LEFT JOIN, soldaki tablodaki tüm değerleri, artı sağ tablodaki eşleşen değerleri veya eşleşen JOIN koşulu yoksa NULL döndürür.

Aşağıdaki sorgu, MÜŞTERİ ve SİPARİŞ tabloları arasındaki LEFT OUTER JOIN gösterir:

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

Sorgunun başarıyla yürütülmesi üzerine aşağıdaki yanıtı görürsünüz:

+----+----------+--------+---------------------+ 
| 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

HiveQL RIGHT OUTER JOIN, sol tabloda hiç eşleşme olmasa bile, sağ tablodaki tüm satırları döndürür. ON deyimi sol tablodaki 0 ​​(sıfır) kayıtla eşleşirse, JOIN sonuçta yine de bir satır döndürür, ancak soldaki tablodaki her sütunda NULL bulunur.

SAĞ BİRLEŞTİRME, sağ tablodaki tüm değerlerin yanı sıra soldaki tablodaki eşleşen değerleri veya eşleşen birleştirme koşulu olmaması durumunda NULL döndürür.

Aşağıdaki sorgu, MÜŞTERİ ve SİPARİŞ tabloları arasında SAĞ DIŞ BİRLEŞTİRME gösterir.

notranslate "> kovan> SEÇ c.ID, c.NAME, o.AMOUNT, o MÜŞTERİLERDEN TARİH c SAĞ DIŞ SİPARİŞLER O AÇIK (c.ID = o.CUSTOMER_ID);

Sorgunun başarıyla yürütülmesi üzerine aşağıdaki yanıtı görürsünüz:

+------+----------+--------+---------------------+ 
| 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 | 
+------+----------+--------+---------------------+

TAM DIŞ KATILIM

HiveQL FULL OUTER JOIN, JOIN koşulunu yerine getiren sol ve sağ dış tabloların kayıtlarını birleştirir. Birleştirilmiş tablo ya her iki tablodaki tüm kayıtları içerir ya da her iki tarafta eksik eşleşmeler için NULL değerleri doldurur.

Aşağıdaki sorgu, MÜŞTERİ ve SİPARİŞ tabloları arasında TAM DIŞ BİRLEŞTİRME gösterir:

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

Sorgunun başarıyla yürütülmesi üzerine aşağıdaki yanıtı görürsünüz:

+------+----------+--------+---------------------+ 
| 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 | 
+------+----------+--------+---------------------+