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í.

  • 👁️ La perspectiva es lógica: Una vista almacena únicamente su instrucción SELECT en el metastore, por lo que no ocupa espacio en disco propio.
  • 🔒 Solo lectura por diseño: Una vista no puede ser el objetivo de LOAD, INSERT o ALTER, porque Hive la evalúa de nuevo en cada consulta.
  • 📍 Los puntos de índice apuntan a los datos: Un índice es un puntero al valor de una columna que permite a Hive leer parte de un archivo en lugar de la tabla completa.
  • 🗂️ Dos cuidadores: La indexación compacta es adecuada para columnas con alta cardinalidad, mientras que la indexación de mapas de bits es adecuada para columnas con pocos valores distintos.
  • 🔄 Reconstrucción manual: Un índice nunca se actualiza automáticamente, por lo que es necesario ejecutar ALTER INDEX REBUILD después de que se modifique la tabla base.
  • 🚫 Eliminado en Hive 3.0: La indexación se eliminó con HIVE-18448 y se sustituyó por vistas materializadas, almacenamiento ORC o Parquet y particionamiento.

Vistas e índices en Hive explicados con ejemplos

¿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.

Preguntas Frecuentes

DROP VIEW view_name la elimina, y ALTER VIEW view_name RENAME TO new_name la renombra. Debido a que una vista no contiene datos, DROP VIEW view_name la elimina, y ALTER VIEW view_name RENAME TO new_name la renombra. Dado que una vista no contiene datos, DROP VIEW view_name la elimina, y ALTER VIEW view_name RENAME TO new_name la renombra.ping Nunca se modifica la tabla base; solo desaparece la entrada del metastore.

Una vista materializada almacena el resultado de la consulta precalculado como datos reales, por lo que consume espacio en disco y requiere una reconstrucción. Una vista normal almacena solo el texto de la consulta y se recalcula en cada referencia.

No. El metastore conserva la instrucción SELECT y la lista de columnas resueltas, nada más. Cada referencia vuelve a ejecutar la consulta subyacente, por lo que una vista sobre una unión lenta seguirá siendo lenta.

En Hive 0.12.0 y versiones anteriores, el nombre de los índices distinguía entre mayúsculas y minúsculas para CREATE INDEX y DROP INDEX, mientras que ALTER INDEX requería minúsculas. Hive 0.13.0 hizo que los nombres de los índices no distinguieran entre mayúsculas y minúsculas para todas las instrucciones.

Sí, en cualquier clúster moderno. La eliminación de particiones borra directorios completos antes de que comience el escaneo, y la segmentación reduce una unión o muestra a archivos específicos, lo que suele ser mejor que lo que podría ofrecer una tabla de índices.

Las herramientas de aprendizaje automático analizan los registros de consultas, clasifican las columnas de predicados según su selectividad y frecuencia, y sugieren dónde sería conveniente implementar una vista materializada o un esquema de partición. Valide cada sugerencia con un plan EXPLAIN antes de aplicarla.

Genera sentencias CREATE VIEW de forma fiable a partir de un comentario breve. Compruebe cualquier detalle específico de la versión, ya que aún emite sintaxis CREATE INDEX que un clúster de Hive 3.0 o posterior rechaza directamente.

El índice es una tabla de punteros independiente, y Hive nunca lo actualiza cuando cambia la tabla base. Sin una reconstrucción, los punteros quedan obsoletos, por lo que el optimizador omite el índice o devuelve coincidencias desactualizadas.

Resumir este post con: