Ejemplos de consultas de Hive: Ordenar por, Agrupar por y Cluster By
⚡ Resumen inteligente
Las consultas de Hive utilizan las cláusulas ORDER BY, GROUP BY, SORT BY, CLUSTER BY y DISTRIBUTE BY para ordenar, agrupar y distribuir filas entre los reductores, y cada cláusula se muestra aquí en una tabla de empleados de ejemplo.

Hive proporciona un lenguaje de consulta de tipo SQL para fines ETL sobre la base de Hadoop sistema de archivos.
El lenguaje de consulta de Hive (HiveQL) proporciona un entorno de tipo SQL en Hive para trabajar con tablas, bases de datos y consultas.
Hive asocia diferentes tipos de cláusulas para realizar distintos tipos de manipulación y consulta de datos, y proporciona conectividad JDBC para una mejor conexión con nodos fuera del entorno.
Las consultas de Hive ofrecen las siguientes características:
- Modelado de datos, como la creación de bases de datos, tablas, etc.
- Funcionalidades ETL como por ejemplotractransformación y carga de datos en tablas
- Une para fusionar diferentes tablas de datos
- Scripts personalizados específicos del usuario para facilitar el código
- Herramienta de consulta más rápida además de Hadoop
Creando una tabla en Hive
Antes de comenzar con el tema principal de este tutorial, primero crearemos una tabla que servirá de referencia para las secciones siguientes.
En este tutorial, vamos a crear la tabla “employees_guru” con 6 columnas, como se muestra en la siguiente captura de pantalla.
De la captura de pantalla anterior,
- Estamos creando la tabla “employees_guru” con 6 columnas que contienen valores como Id, Nombre, Edad, Dirección, Salario y Departamento, que pertenecen a los empleados presentes en la organización “guru”.
- En este paso, cargaremos datos en la tabla employees_guru. Los datos que vamos a cargar se encuentran en el archivo Employees.txt.
Ordenar por consulta
La sintaxis ORDER BY en HiveQL es similar a la sintaxis de ORDER BY en el SQL idioma.
ORDER BY es la cláusula que usamos con la instrucción “SELECT” en consultas de colmena Para ordenar los datos, utiliza columnas de las tablas de Hive para ordenar los valores de columna específicos mencionados con ORDER BY, y la consulta muestra los resultados en orden ascendente o descendente de esos valores.
Si el campo ORDER BY mencionado es una cadena de texto, el resultado se muestra en orden lexicográfico. En el backend, todo el conjunto de resultados debe pasarse a un único reductor.
Ese único reductor también hace que ORDER BY sea costoso en una tabla grande, por lo que en modo estricto (hive.mapred.mode=strict) Hive rechaza una ORDER BY que no contiene una cláusula LIMIT.
La captura de pantalla que aparece a continuación muestra la consulta ORDER BY y sus filas ordenadas.
En la captura de pantalla anterior, podemos observar lo siguiente:
- Se trata de una consulta realizada sobre la tabla “employees_guru” con la cláusula ORDER BY y Department como nombre de columna definido para ORDER BY. “Department” es una cadena de texto, por lo que muestra los resultados en orden lexicográfico.
- Este es el resultado real de la consulta. Los resultados se muestran según la columna Departamento, como ADMINISTRACIÓN, Finanzas, etc., en orden.
consulta:
SELECT * FROM employees_guru ORDER BY Department;
Agrupar por consulta
La cláusula GROUP BY utiliza columnas en las tablas de Hive para agruparping Los valores de columna específicos mencionados con GROUP BY, y la consulta selecciona y muestra los resultados agrupados por esos valores.
Por ejemplo, la captura de pantalla a continuación muestra el número total de empleados presentes en cada departamento. Aquí tenemos "Departamento" como valor de GROUP BY.
En la captura de pantalla anterior, observaremos lo siguiente:
- Es la consulta que se realiza en la tabla “employees_guru” con la cláusula GROUP BY y Department como nombre de columna GROUP BY definido.
- El resultado que se muestra aquí es el nombre del departamento y el número de empleados en cada uno de ellos. Todos los empleados que pertenecen a un departamento específico se agrupan y se muestran, de modo que cada fila de resultados corresponde al nombre de un departamento con su número total de empleados.
consulta:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Ordenar por
La cláusula SORT BY ordena los resultados según los nombres de las columnas de las tablas de Hive. Podemos usar DESC para ordenar en orden descendente y ASC para ordenar en orden ascendente.
La función SORT BY ordena las filas antes de enviarlas al reductor, por lo que el orden se garantiza dentro de cada reductor, en lugar de en todo el resultado. El ordenamiento siempre depende del tipo de columna.
Por ejemplo, si el tipo de columna es numérico, se ordena numéricamente, y si el tipo de columna es de cadena, se ordena lexicográficamente.
La captura de pantalla que aparece a continuación muestra la consulta SORT BY usando DESC.
De la captura de pantalla anterior podemos observar lo siguiente:
- Es la consulta realizada en la tabla “employees_guru” con la cláusula SORT BY y “Id” como nombre de columna SORT BY definido. Usamos la palabra clave DESC.
- Por lo tanto, la salida que se muestra está en orden descendente de “Id”.
consulta:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY se utiliza como alternativa tanto a las cláusulas DISTRIBUTE BY como a las cláusulas SORT BY en HiveQL.
La cláusula CLUSTER BY se utiliza en las tablas de Hive. Hive usa las columnas de CLUSTER BY para distribuir las filas entre los reductores, y las columnas de CLUSTER BY se envían a varios reductores. Además, garantiza el orden de clasificación de los valores presentes en dichos reductores.
Por ejemplo, la cláusula CLUSTER BY se menciona en el nombre de la columna Id de la tabla employees_guru. Al ejecutar esta consulta, se envían resultados a varios reductores en el backend, pero en el frontend funciona como una cláusula alternativa tanto para SORT BY como para DISTRIBUTE BY.
Este es el proceso de back-end cuando realizamos una consulta con SORT BY, GROUP BY o CLUSTER BY en el marco de MapReduce. Por lo tanto, si queremos almacenar los resultados en varios reducers, utilizamos CLUSTER BY.
La gramática CLUSTER BY solo acepta nombres de columna, por lo que no se le pueden adjuntar ASC y DESC; un resultado descendente necesita DISTRIBUTE BY con un SORT BY … DESC separado.
La captura de pantalla que aparece a continuación muestra la consulta CLUSTER BY en Id.
De la captura de pantalla anterior obtenemos las siguientes observaciones:
- Es la consulta que aplica la cláusula CLUSTER BY al valor del campo Id. Aquí se realizará una ordenación según los valores de Id.
- Muestra los valores de Id y Nombre presentes en employees_guru en orden alfabético.
consulta:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuir por
La cláusula DISTRIBUTE BY se utiliza en tablas presentes en Hive. Hive utiliza las columnas de DISTRIBUTE BY para distribuir las filas entre los reductores, de modo que todas las filas que comparten el mismo valor de columna de DISTRIBUTE BY van al mismo reductor.
- Garantiza que cada uno de los N reductores reciba una señal sin solapamiento.ping conjunto de los valores de la columna
- No ordena la salida de cada reductor, y no se garantiza que las filas coincidentes se coloquen una al lado de la otra.
La captura de pantalla a continuación muestra la consulta DISTRIBUTE BY en Id.
En la captura de pantalla anterior, podemos observar lo siguiente:
- La cláusula DISTRIBUTE BY se aplica al Id de la tabla “employees_guru”.
- La salida muestra el ID y el nombre. En el backend, las filas con el mismo ID van al mismo reductor.
consulta:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Las cuatro cláusulas pueden resultar confusas, por lo que la siguiente tabla las compara.
| Cláusula | Reductores | Lo que garantiza |
|---|---|---|
| ORDEN POR | Un | Pedido total en todo el resultado |
| ORDENAR POR | Muchos | Realizar el pedido únicamente dentro de cada reductor. |
| DISTRIBUIDO POR | Muchos | La misma clave llega al mismo reductor, sin ordenar. |
| AGRUPACIÓN POR | Muchos | DISTRIBUIR POR más ORDENAR POR, ascendente |






