HiveQL - Select-Joins


Advertisements

UNIRSE A una cláusula que se utiliza para combinar campos específicos de dos tablas mediante valores comunes a cada uno de ellos. Se utiliza para combinar registros de dos o más tablas en la base de datos. Es más 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 continuación en este capítulo. 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
  • COMBINACIÓN EXTERNA IZQUIERDA
  • COMBINACIÓN EXTERNA DERECHA
  • COMBINACIÓN EXTERNA COMPLETA

UNIRSE A

Cláusula JOIN se usa para combinar y recuperar los registros de varias tablas. UNIRSE es la misma que en OUTER JOIN en SQL Una condición de combinación 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 ejecución 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   | 
+----+----------+-----+--------+

COMBINACIÓN 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 cláusula ON coincide con 0 (cero) los registros de la tabla de la derecha, aún 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, más el valor de la tabla de la derecha, o NULL en caso de no coincidir predicado de combinación.

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 ejecución 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                | 
+----+----------+--------+---------------------+

COMBINACIÓN EXTERNA DERECHA

La HiveQL COMBINACIÓN 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 cláusula ON coincide con 0 (cero) los registros de la tabla de la izquierda, la Unión 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, más los valores de la tabla de la izquierda, o NULL en caso de no coincidir predicado de combinación.

La consulta siguiente demuestra combinación 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 ejecución 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 | 
+------+----------+--------+---------------------+

COMBINACIÓN EXTERNA COMPLETA

La HiveQL FULL OUTER JOIN combina los registros tanto de la izquierda y la derecha exterior tablas que cumplan la condición de combinación. 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 ejecución 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