Big Data
Departamento de Ciencia de la Computación
Universidad Católica San Pablo
24 de Octubre de 2023
Consultas JOIN en Hive
Rafael Alonso David Peñalva
[Link]@[Link]
1. Introducción
1.1. ¿Qué es Hive?
Hive es una infraestructura de almacenamiento de datos basada en Apache Hadoop. Hadoop
proporciona capacidades masivas de expansión y tolerancia a fallos para el almacenamiento y
procesamiento de datos en hardware común.
Hive está diseñado para facilitar la resumen de datos, las consultas ad-hoc y el análisis de grandes
volúmenes de datos. Proporciona SQL, lo que permite a los usuarios realizar consultas ad-hoc,
resumen y análisis de datos fácilmente. Al mismo tiempo, el SQL de Hive ofrece a los usuarios
múltiples lugares para integrar su propia funcionalidad para realizar análisis personalizados, como
Funciones Definidas por el Usuario (UDFs)
1.2. Lo que Hive NO es
Hive no está diseñado para el procesamiento de transacciones en línea. Es mejor utilizarlo para
tareas tradicionales de almacenamiento de datos
1.3. Consultas JOIN en Hive
Las consultas JOIN en Hive, al igual que en otros sistemas basados en SQL, permiten combinar
registros de dos o más tablas en función de una o varias condiciones de coincidencia (generalmente
basadas en valores de columnas). Hive, como herramienta de consulta en el ecosistema Hadoop,
permite realizar JOIN en grandes volúmenes de datos distribuidos.
2. Sintaxis y Tipos de JOIN
Utilizaremos la sintaxis descrita en la documentación de Hive:
1 join_table :
2 table_reference [ INNER ] JOIN table_factor [ join_condition ]
3 | table_reference { LEFT | RIGHT | FULL } [ OUTER ] JOIN table_reference
join_condition
4 | table_reference LEFT SEMI JOIN table_reference join_condition
5 | table_reference CROSS JOIN table_reference [ join_condition ]
Tenemos los siguientes tipos de JOIN:
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
Consultas JOIN en Hive
FULL OUTER JOIN
LEFT SEMI JOIN
CROSS JOIN
3. Ejemplos
Se definirán dos tablas para llevar a cabo los ejemplos:
autor_id nombre
1 García
2 Borges
3 Allende
Cuadro 1: Autores
libro_id titulo autor_id
1 Cien años de soledad 1
2 Ficciones 2
3 La casa de los espíritus 3
4 El Aleph 2
5 Eva Luna 3
6 Sobre héroes y tumbas NULL
Cuadro 2: Libros
3.1. INNER JOIN
Combina registros de ambas tablas donde la condición especificada en la expresión es verdadera.
Si la condición no se cumple para ciertos registros, estos registros no aparecerán en el resultado.
1 SELECT autores . nombre , libros . titulo
2 FROM autores
3 INNER JOIN libros ON autores . autor_id = libros . autor_id ;
El resultado de la consulta sería:
nombre titulo
García Cien años de soledad
Borges Ficciones
Allende La casa de los espíritus
Borges El Aleph
Allende Eva Luna
3.2. LEFT OUTER JOIN
Devuelve todos los registros de la tabla de la izquierda y los registros coincidentes de la tabla de
la derecha. Si no hay coincidencias en la tabla de la derecha, el resultado contendrá NULL en
las columnas de la derecha.
2
Consultas JOIN en Hive
1 SELECT autores . nombre , libros . titulo
2 FROM autores
3 LEFT OUTER JOIN libros ON autores . autor_id = libros . autor_id ;
El resultado de la consulta serían todos los autores y sus libros, incluso si no tienen un libro:
nombre titulo
García Cien años de soledad
Borges Ficciones
Allende La casa de los espíritus
Borges El Aleph
Allende Eva Luna
3.3. RIGHT OUTER JOIN
Es el inverso del LEFT JOIN. Devuelve todos los registros de la tabla de la derecha y los registros
coincidentes de la tabla de la izquierda. Si no hay coincidencias en la tabla de la izquierda, el
resultado contendrá NULL en las columnas de la izquierda.
1 SELECT autores . nombre , libros . titulo
2 FROM autores
3 RIGHT OUTER JOIN libros ON autores . autor_id = libros . autor_id ;
El resultado de la consulta serían todos los libros y sus autores, incluso si un libro no tiene un
autor definido:
nombre titulo
García Cien años de soledad
Borges Ficciones
Allende La casa de los espíritus
Borges El Aleph
Allende Eva Luna
NULL Sobre héroes y tumbas
3.4. FULL OUTER JOIN
Devuelve todos los registros cuando hay una coincidencia en una de las tablas. Es decir, devuelve
registros de ambas tablas, rellenando con NULL en los lados donde no hay coincidencia.
1 SELECT autores . nombre , libros . titulo
2 FROM autores
3 FULL OUTER JOIN libros ON autores . autor_id = libros . autor_id ;
El resultado de la consulta serían todos los autores y todos los libros, independientemente de si
hay una coincidencia:
3.5. LEFT SEMI JOIN
Devuelve registros de la tabla de la izquierda para los cuales existe al menos un registro en la
tabla de la derecha que cumple con la condición de JOIN. No devuelve ninguna columna de la
tabla de la derecha.
3
Consultas JOIN en Hive
nombre titulo
García Cien años de soledad
Borges Ficciones
Allende La casa de los espíritus
Borges El Aleph
Allende Eva Luna
NULL Sobre héroes y tumbas
1 SELECT autores . nombre
2 FROM autores
3 LEFT SEMI JOIN libros ON autores . autor_id = libros . autor_id ;
El resultado de la consulta serían los autores que al menos tienen un libro:
nombre
García
Borges
Allende
3.6. CROSS JOIN
Produce el producto cartesiano de las dos tablas; es decir, combina cada fila de la tabla de la
izquierda con cada fila de la tabla de la derecha.
1 SELECT autores . nombre , libros . titulo
2 FROM autores
3 CROSS JOIN libros ;
El resultado de la consulta sería (Solo mostrando las primeras filas para ahorrar espacio):
nombre titulo
García Cien años de soledad
García Ficciones
García La casa de los espíritus
... ...
Serían 18 filas en total (3 autores x 6 libros).