Introducción
Imagine que abre los registros de pedidos de la empresa minorista como una hoja de cálculo. Cada fila describe un pedido y cada columna describe un atributo, como su fecha o estado de pago. Quiere responder a una pregunta sencilla: ¿Qué pedidos pagados debería revisar primero el equipo? Leer cada fila a mano resulta poco práctico a medida que crecen los archivos.
Apache Hive permite describir datos de archivos como tablas y hacer preguntas mediante SQL, el lenguaje de consulta estructurado. Una definición de tabla describe las columnas y dónde residen los archivos subyacentes; los archivos contienen los registros reales. Hive utiliza esa definición para interpretar los datos y ejecutar una consulta. HDFS proporciona el almacenamiento en este entorno preparado, mientras que Hive proporciona la capa de tablas y consultas. Subir un archivo por sí solo no lo convierte automáticamente en una tabla de Hive.
Hive es útil para consultas analíticas sobre datos almacenados, como los informes por lotes. No es lo mismo que editar celdas de una hoja de cálculo y este curso no lo presenta como un sustituto de la base de datos transaccional de cualquier aplicación. Aquí comenzará con seis registros fáciles de leer para poder predecir la respuesta correcta antes de trabajar con entradas mayores.
Utilizará Beeline, el cliente de terminal de Hive, para conectarse a un servicio HiveServer2 en ejecución. El servicio y una tabla de ejemplo ya están preparados. No necesita instalar software, inicializar metadatos ni conocer previamente Java, Python, Hadoop o SQL. Basta con saber utilizar la terminal de forma básica y leer una tabla. Para practicar más con la terminal o las bases de datos, consulte las rutas de Linux y Database.
Su recorrido de aprendizaje consiste en ver filas reales, descubrir la estructura de la tabla, guardar una consulta que seleccione pedidos pagados y cambiar una condición para comprobar su comprensión.
Vea sus primeras filas de Hive
En este paso, se conectará a Hive y leerá una tabla preparada antes de aprender a acotar una consulta.
Utilice la pestaña Terminal. Vaya al directorio local del proyecto con cd:
cd /home/labex/project
Beeline es un cliente: envía SQL a HiveServer2, que se encarga de la consulta. En el comando siguiente, -u proporciona la URL de conexión, -n proporciona el nombre de usuario de la sesión y -e proporciona el SQL que se ejecutará antes de salir y volver a la terminal. La URL proporcionada conecta con el servicio de Hive de esta máquina en el puerto 10000, inicialmente en la base de datos default. No necesita una cuenta externa ni una contraseña para este servicio didáctico.
El SQL SELECT * FROM retail_intro.orders; solicita todas las columnas (*) de la tabla orders de la base de datos retail_intro. Un punto y coma termina la sentencia. Las comillas simples mantienen unida toda la sentencia SQL como un argumento del shell:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SELECT * FROM retail_intro.orders;'
Busque seis filas de pedidos y nombres de columnas como order_id, quantity y order_status. Alrededor de los resultados pueden aparecer mensajes de conexión y bordes de tabla. Localice el pedido o1: tiene cantidad 2, precio unitario 10.00 y estado paid (pagado). El pedido o3 está pending (pendiente); o5 está refunded (reembolsado). Cada fila es un pedido simplificado que contiene un tipo de producto.
Una consulta recupera datos; este SELECT no cambia el estado de pago ni actualiza el archivo de origen. Sin una cláusula de ordenación, no suponga que SQL garantiza un orden concreto de filas.
Guarde la salida de la misma consulta en una transcripción local. El operador > del shell crea el archivo o sustituye su contenido anterior:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SELECT * FROM retail_intro.orders;' > /home/labex/project/output/first-look.txt
Léala localmente:
cat /home/labex/project/output/first-look.txt
Las filas de pedidos deberían seguir presentes. La terminal ejecutó el cliente Beeline, Hive leyó la definición de tabla y los archivos, y el shell guardó localmente el resultado mostrado. A continuación descubrirá los objetos que hay detrás de esa consulta.
Descubra la base de datos, la tabla y las columnas
En este paso, explorará la base de datos y la definición de tabla en lugar de adivinar los nombres de las columnas.
Una base de datos es un espacio de nombres que agrupa tablas. SHOW DATABASES lista las bases de datos disponibles; no lee todos sus archivos de datos:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SHOW DATABASES;'
Busque default y retail_intro. Utilice USE para seleccionar una base de datos, seguido de SHOW TABLES en la misma invocación:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'USE retail_intro; SHOW TABLES;'
Debería encontrar orders. Cada comando -e abre una nueva sesión de Beeline, por lo que un USE de una invocación no se conserva de forma implícita en la siguiente. Seleccione la base de datos en cada archivo SQL o utilice su nombre completo, retail_intro.orders.
DESCRIBE enumera las columnas y los tipos de la tabla. Por ejemplo, STRING almacena texto, INT almacena números enteros, DECIMAL(10,2) almacena números de punto fijo con dos posiciones decimales y DATE representa una fecha del calendario:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'DESCRIBE retail_intro.orders;'
Relacione los campos con las filas de la primera consulta. Una cantidad y un precio tienen significados y tipos distintos aunque ambos parezcan numéricos. Calculará valores monetarios en un laboratorio posterior; hoy solo leerá los campos proporcionados.
Para guardar resultados de consultas, Beeline puede utilizar un formato de texto sencillo. --outputformat=tsv2 selecciona campos separados por tabulaciones, --showHeader=false omite la fila de encabezados y --silent=true reduce los mensajes del cliente. Guarde el esquema descrito utilizando esas opciones de salida:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e 'DESCRIBE retail_intro.orders;' > /home/labex/project/output/table-schema.txt
La transcripción también puede incluir mensajes de ejecución. Las filas importantes del esquema nombran las siete columnas y sus tipos. La definición de tabla son metadatos: indica a Hive cómo interpretar los archivos almacenados. En el próximo laboratorio verá cómo crear esa correspondencia usted mismo.
Guarde una consulta para los primeros pedidos pagados
En este paso, seleccionará únicamente las columnas y las filas pagadas que necesita el equipo de revisión, con un orden de resultados predecible.
Una consulta puede acotar los datos de varias formas independientes:
| Cláusula | Propósito aquí |
|---|---|
SELECT |
Elegir las columnas de salida |
FROM |
Elegir la tabla de origen |
WHERE |
Conservar las filas cuya condición es verdadera |
ORDER BY |
Ordenar el resultado explícitamente |
LIMIT |
Devolver como máximo el número solicitado de filas |
Solicitará order_id, order_status y quantity, conservará solo las filas paid, ordenará por ID de pedido y devolverá las primeras dos. Prediga qué filas se conservan: entre los seis pedidos proporcionados, o1 y o2 son los primeros ID pagados en ese orden.
Guarde el SQL en un archivo local para poder examinarlo y volver a ejecutarlo. En el siguiente comando del shell, cat > file <<'SQL' inicia un documento en línea (here-document): las líneas hasta el SQL de cierre se escriben literalmente en el archivo. Son texto SQL, no comandos del shell. Copie el bloque completo, incluidas las líneas delimitadoras:
cat > /home/labex/project/queries/first-query.sql <<'SQL'
USE retail_intro;
SELECT order_id, order_status, quantity
FROM orders
WHERE order_status = 'paid'
ORDER BY order_id
LIMIT 2;
SQL
El 'paid' entre comillas dentro del SQL es un valor de texto. El = compara el estado de cada fila con ese valor; no asigna un estado nuevo. La sentencia USE hace que el archivo sea independiente de una sesión previa del cliente.
La opción -f de Beeline lee un archivo SQL local. Ejecute su archivo y guarde la salida con las opciones de formato de texto que acaba de aprender:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/first-query.sql > /home/labex/project/output/first-query.txt
Lea la transcripción guardada:
cat /home/labex/project/output/first-query.txt
Las filas del resultado deberían ser:
o1 paid 2
o2 paid 1
Los mensajes de ejecución que puedan aparecer alrededor no son registros de pedidos. LIMIT 2 no significaba dos filas arbitrarias: la ordenación explícita determinó qué filas coincidentes aparecieron primero. Ahora tiene un archivo de consulta reutilizable y un resultado observable para la pregunta del equipo.
Prediga el efecto de cambiar una condición
En este paso, cambiará únicamente la condición de estado y comprobará si las filas devueltas coinciden con su predicción.
Conserve intacta la consulta de pedidos pagados. En la misma tabla existe un pedido pending: o3, con cantidad 1. Si la condición de estado cambia de paid a pending, ¿cuántas filas debería devolver un límite de dos? Un límite es un máximo, por lo que la respuesta es una.
Escriba la misma consulta cambiando solo esa condición:
cat > /home/labex/project/queries/pending-query.sql <<'SQL'
USE retail_intro;
SELECT order_id, order_status, quantity
FROM orders
WHERE order_status = 'pending'
ORDER BY order_id
LIMIT 2;
SQL
Ejecútela de forma independiente:
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/pending-query.sql > /home/labex/project/output/pending-query.txt
Lea el resultado guardado:
cat /home/labex/project/output/pending-query.txt
La única fila de pedido debería ser:
o3 pending 1
Cambiar un filtro seleccionó una fila diferente sin modificar los registros almacenados de la tabla. Ahora ha utilizado la misma estructura básica de consulta para responder dos preguntas. A continuación, conectará un archivo CSV existente con una definición de tabla en lugar de depender de una tabla preparada.
Resumen
Situó Hive en un flujo de archivos a tablas y consultas, se conectó mediante Beeline y exploró una base de datos, una tabla y un esquema. Escribió un archivo SQL reutilizable con selección, filtrado, ordenación explícita y un límite de filas, y después predijo y comprobó un cambio de una condición.
La tabla estaba preparada para esta primera experiencia. En el próximo laboratorio, vinculará un archivo CSV con su propia tabla externa y aprenderá cómo se relacionan sus metadatos y sus archivos subyacentes.



