Vista e indexación de Hive: Creación con ejemplos
⚡ Resumen inteligente
En Hive, las vistas son consultas guardadas que se comportan como tablas de solo lectura, mientras que los índices son punteros a una columna que aceleran las búsquedas, y ambos se crean con breves instrucciones HiveQL, como se muestra aquí.
¿Qué es una vista?
Las vistas son similares a las tablas y se generan en función de los requisitos. Una vista es un objeto puramente lógico sin almacenamiento propio: Hive solo guarda el texto de la consulta en el metastore y lo evalúa cada vez que se hace referencia a la vista.
- Podemos guardar cualquier conjunto de datos de resultados como una vista en Hive
- Su uso es similar al de las vistas utilizadas en SQL
- Una vista es de solo lectura, por lo que no puede ser el destino de una instrucción LOAD, INSERT o ALTER que escriba datos.
Creación de vista:
Sintaxis:
Create VIEW <VIEWNAME> AS SELECT
El formulario completo documentado también acepta una cláusula IF NOT EXISTS y una lista de columnas opcional, lo cual resulta útil cuando la lista SELECT contiene expresiones en lugar de simples nombres de columnas.
Ejemplo:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
En este ejemplo, creamos la vista Sample_View, que muestra todos los valores de fila con un campo de salario mayor que 25000. El filtro se encuentra dentro de la vista, por lo que cualquier consulta que seleccione datos de Sample_View solo verá esas filas.
¿Qué es el índice?
Los índices son punteros al nombre de una columna específica de una tabla. El objetivo de un índice es mejorar la velocidad de búsqueda: sin uno, una consulta con un predicado como DONDE tab1.col1 = 10 Carga la tabla o partición completa y procesa cada fila, mientras que un índice en la columna 1 permite a Hive leer solo una parte del archivo.
- El usuario tiene que definir manualmente el índice.
- Siempre que creamos un índice, significa que estamos creando un puntero a un nombre de columna específico de la tabla.
- Cualquier cambio realizado en la columna presente en la tabla se almacena utilizando el valor de índice creado en el nombre de la columna.
Esa mejora de velocidad no es gratuita. La creación del índice requiere procesamiento adicional, y el índice en sí ocupa espacio en disco que debe mantenerse junto con la tabla.
Sintaxis:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Ejemplo:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Aquí creamos un índice en la tabla guruhive_internaltable para la columna llamada id. Tenga en cuenta que una instrucción completa en una versión que aún admite indexación también necesita una cláusula index-handler, que se muestra en detalle en la siguiente sección.
Diferencia entre vista e índice en Hive
Las vistas y los índices suelen presentarse juntos porque ambos se basan en una tabla existente, pero resuelven problemas diferentes. Una vista modifica lo que ve una consulta, mientras que un índice mejora la velocidad con la que Hive la encuentra. La siguiente tabla compara ambos conceptos.
| Aspecto | Ver | Home |
|---|---|---|
| Lo que almacena | Solo la instrucción SELECT, en el metastore | Una tabla de índices separada que contiene punteros a los datos. |
| Propósito | Simplifica o restringe lo que devuelve una consulta. | Reducir la cantidad de datos escaneados para un predicado. |
| Precio del disco | Ninguna | Almacenamiento adicional más una reconstrucción después de cambios en los datos. |
| Acceso de escritura | Sólo lectura | No se consulta directamente; el optimizador lo utiliza. |
| estado actual | Totalmente apoyado | Eliminado en Hive 3.0 |
En la práctica, se crea una vista para facilitar la lectura y el control de acceso, y se crea un índice exclusivamente para mejorar el rendimiento en una columna selectiva.
Tipos de índices en Hive con sintaxis
Las versiones anteriores de Hive 2.x incluían dos gestores de índices, cuyo nombre se especificaba en la cláusula AS obligatoria. La indexación compacta llegó con Hive 0.7.0 y la indexación de mapas de bits con Hive 0.8.0.
- Índice compacto: Almacena el valor junto con la dirección del bloque HDFS que lo contiene, en lugar de registrar la ubicación de cada ocurrencia individual. Es adecuado para columnas con muchos valores distintos.
- Índice de mapa de bits: Almacena un mapa de bits por cada valor distinto, que es el enfoque habitual para una columna con un número reducido de valores distintos, como un indicador de estado o género.
Se crea, se lista y se elimina un índice compacto de la siguiente manera:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
La opción WITH DEFERRED REBUILD registra el índice sin rellenarlo, de modo que la compilación se puede programar por separado con ALTER INDEX. Un índice de mapa de bits se crea de la misma manera, con un nombre de controlador diferente:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
Un índice no se actualiza automáticamente. Cada vez que la tabla base recibe nuevos datos, hay que ejecutar de nuevo ALTER INDEX … REBUILD, y en una tabla particionada la reconstrucción puede limitarse a una sola partición.
¿Por qué se eliminó la indexación en Hive 3.0?
La indexación se eliminó de Hive en la versión 3.0 (HIVE-18448), por lo que las funciones CREATE INDEX, SHOW INDEX y DROP INDEX ya no existen en los clústeres actuales. Esta función rara vez justificaba su coste de reconstrucción una vez que el almacenamiento columnar y el optimizador basado en costes alcanzaron la madurez. Existen tres alternativas que cubren las mismas necesidades.
- Vistas materializadas: introducido en Hive 3.0.0, un vista materializada Almacena el resultado precalculado de una consulta y el optimizador reescribe automáticamente las consultas entrantes en función de él.
- Formatos de archivo columnares: ORC y Parquet cuentan con sus propios índices ligeros y estadísticas de mínimos y máximos, por lo que el lector puede omitir franjas, bloques o archivos completos sin necesidad de un índice definido por el usuario.
- Particiones y cubos: particionamiento y agrupamiento Se eliminan los datos a nivel de directorio y archivo, lo que suele suprimir mucha más información que la que elimina un índice.
En Hive 2.x, un índice sigue siendo válido, pero para trabajos nuevos es mejor utilizar alguna de las opciones anteriores.

