HiveQL - Select-Joins



UNIRSE A una clusula que se utiliza para combinar campos especficos de dos tablas mediante valores comunes a cada uno de ellos. Se utiliza para combinar registros de dos o ms tablas en la base de datos. Es ms o menos similar a SQL.

Sintaxis

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]

Ejemplo

Vamos a utilizar los dos cuadros que figuran a continuacin en este captulo. Considere la siguiente tabla denominada CLIENTES.

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

Considerar otra tabla Pedidos de la siguiente manera:

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

Hay diferentes tipos de combinaciones dado de la siguiente manera:

  • UNIRSE A
  • COMBINACIN EXTERNA IZQUIERDA
  • COMBINACIN EXTERNA DERECHA
  • COMBINACIN EXTERNA COMPLETA

UNIRSE A

Clusula JOIN se usa para combinar y recuperar los registros de varias tablas. UNIRSE es la misma que en OUTER JOIN en SQL Una condicin de combinacin es la de ser elevado mediante las claves primarias y las claves externas de las tablas.

La siguiente consulta se ejecuta en el cliente y para tablas y recupera los registros:

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

El xito de la ejecucin de la consulta, se llega a ver la siguiente respuesta:

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

COMBINACIN EXTERNA IZQUIERDA

La HiveQL LEFT OUTER JOIN devuelve todas las filas de la tabla de la izquierda, incluso si no hay coincidencias en la tabla de la derecha. Esto significa que si la clusula ON coincide con 0 (cero) los registros de la tabla de la derecha, an devuelve una fila en el resultado, pero con un valor NULL en cada columna de la tabla de la derecha.

UN LEFT JOIN devuelve todos los valores de la tabla de la izquierda, ms el valor de la tabla de la derecha, o NULL en caso de no coincidir predicado de combinacin.

La consulta siguiente demuestra LEFT OUTER JOIN entre el cliente y el orden las tablas:

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

El xito de la ejecucin de la consulta, se llega a ver la siguiente respuesta:

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

COMBINACIN EXTERNA DERECHA

La HiveQL COMBINACIN EXTERNA DERECHA devuelve todas las filas de la tabla de la derecha, incluso si no hay coincidencias en la tabla de la izquierda. Si la clusula ON coincide con 0 (cero) los registros de la tabla de la izquierda, la Unin sigue siendo devuelve una fila en el resultado, pero con un valor NULL en cada columna de la tabla de la izquierda.

EL DERECHO A devuelve todos los valores de la tabla de la derecha, ms los valores de la tabla de la izquierda, o NULL en caso de no coincidir predicado de combinacin.

La consulta siguiente demuestra combinacin externa derecha entre las tablas Clientes y Pedidos.

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

El xito de la ejecucin de la consulta, se llega a ver la siguiente respuesta:

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

COMBINACIN EXTERNA COMPLETA

La HiveQL FULL OUTER JOIN combina los registros tanto de la izquierda y la derecha exterior tablas que cumplan la condicin de combinacin. La tabla contiene todos los registros de las tablas, o llena de valores nulos para partidos perdidos en cualquier lado.

La siguiente consulta muestra FULL OUTER JOIN entre el cliente y el orden las tablas:

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

El xito de la ejecucin de la consulta, se llega a ver la siguiente respuesta:

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