Mejora de las consultas de la colmena con índices

La creación de un índice es una práctica común con bases de datos relacionales cuando se quiere acelerar el acceso a una columna o conjunto de columnas en su base de datos. Sin un índice, el sistema de base de datos tiene que leer todas las filas de la tabla para encontrar los datos que ha seleccionado. Los índices se vuelven aún más esencial cuando las tablas crecen extremadamente grande, y ya que ahora, sin duda sabe, la colmena se nutre de tablas de gran tamaño.

Como era de esperar, la colmena es compatible con la creación de índices en tablas, aunque su funcionalidad es aún un poco inmaduro. Sin embargo, la comunidad de la colmena está activo, y la indexación con el tiempo madurará. A pesar de sus limitaciones actuales, la indexación ofrece un enfoque para acelerar las consultas colmena con poco esfuerzo.

Puede optimizar las consultas colmena en al menos cinco formas: En primer lugar, con un poco de investigación, a menudo se puede acelerar su une mediante el aprovechamiento de ciertas técnicas de optimización, como se describe en el wiki colmena. En segundo lugar, las opciones de almacenamiento en columnas pueden ser muy útiles. Recuerde que el formato de archivo de ORC es nueva como de colmena 0,11.

En tercer lugar, puede particionar tablas. En cuarto lugar, la comunidad de la colmena ha proporcionado la indexación. Por último, no se olvide de la hive.exec.mode.local.auto variable de configuración.

En los siguientes son los pasos necesarios para el índice FlightInfo2008 mesa. Esta extremadamente grande tabla tiene millones de filas, por lo que hace un buen candidato para un índice o dos.

(A) CREAR f08_index ÍNDICE DE LA TABLA flightinfo2008 (Origen) AS `COMPACT` CON reconsti- diferido (B) ALTER INDEX f08_index EN flightinfo2008 reconsti- (C) de la colmena (FlightData) gt; VER índices en FlightInfo2008-OKf08indexflightinfo2008 compactTime origen flightdata__flightinfo2008_f08index__ tomados: 0,079 segundos, fue a buscar: 1 fila (s) (D) de la colmena (FlightData) gt; DESCRIBIR flightdata__flightinfo2008_f08index __- cadena OKorigin string_offsetsarray None_bucketnameTiempo de toma: 0.112 segundos, fue a buscar: 3 fila (s) (E) de la colmena (FlightData) gt; Origen SELECT, COUNT (1) a partir de flightinfo2008 donde el grupo Origen = `SYR` por origen-SYR 12032Time toma: 17.34 segundos, fue a buscar: 1 fila (s) (F) de la colmena (FlightData) gt; Origen SELECT, TAMAÑO ( `_offsets`) a partir de flightdata__flightinfo2008_f08index__ DONDE origen = `SYR`-SYR 12032Time toma: 8.347 segundos, recuperados de: 1 fila (s) (G) de la colmena (FlightData) gt; DESCRIBIR flightdata__flightinfo2008_f08index __- cadena OKorigin string_offsetsarray None_bucketnameTiempo de toma: 0,12 segundos, fue a buscar: 3 fila (s)

Paso (A) crea el índice a través del ‘COMPACTO’Manejador de índice en el Origen columna. Colmena también ofrece un controlador de índice de mapa de bits a partir de la versión 0.8, que está destinado a la creación de índices en columnas con unos valores únicos.

En la Etapa (A) las palabras clave CON DIFERIDO RECONSTRUIR encarga a la colmena para crear primero un paso en índices vacío (B) es donde realmente se construye el índice con la ALTER INDEX ... REBUILD mando. Índice diferida se acumula puede ser muy útil en los flujos de trabajo en un solo proceso crea las tablas e índices, otra carga los datos y construye los índices y un proceso final lleva a cabo el análisis de datos.

Colmena no proporciona el mantenimiento de índices automática, por lo que necesita para reconstruir el índice si sobrescribe o añadir datos a la tabla. Además, los índices de la colmena soportan particiones de la tabla, por lo que se puede limitar a una partición de una reconstrucción. La etapa (C) ilustra cómo se puede enumerar o mostrar los índices creados en contra de una tabla en particular.

Paso (D) ilustra un punto importante con respecto a los índices de la colmena: índices de la colmena se implementan como tablas. Es por esto que es necesario crear primero la tabla de índice y luego construirlo para rellenar la tabla. Por lo tanto, se puede utilizar índices en por lo menos dos maneras:

  • Contar con el sistema para utilizar automáticamente índices que se crean.

  • Reescribir algunas consultas para aprovechar la nueva tabla de índice.

Video: Enfermedades de las colmenas. Poyo escayolado, 2º tratamiento

El uso automático de índices está progresando, pero este aspecto es un trabajo en progreso. Centrándose en la segunda opción, en la etapa (e) se escribe una consulta que busca determinar el número de vuelos salieron del aeropuerto de Syracuse durante el año 2008. Para obtener esta información, a aprovechar la CONTAR función agregada.

Se puede ver que la colmena tomó 17.32 segundos en la máquina virtual para informar que 12.032 vuelos se originó a partir de Syracuse, Nueva York.

En la etapa (f), a aprovechar la nueva tabla de índice y utiliza el TAMAÑO funcionar en su lugar. Paso (F) tiene más sentido después de estudiar la etapa (d): La etapa (d) muestra lo que una tabla de índices parece, donde los registros de cada bodega de la columna _bucketname, que es la ubicación de los datos en el almacén de la colmena (/ Home / BiAdmin / colmena / almacén, en este caso), y una _offsets array, que es el índice en la tabla (FlightInfo2008) en este caso.

Así que ahora la consulta en la etapa (f) tiene sentido. Todo colmena tiene que hacer es encontrar el SYR origen (por Syracuse) en el flightdata__flightinfo2008_f08index__ y la tabla a continuación, contar las filas de la _offsets matriz para obtener el número de vuelos - una forma sencilla y elegante para duplicar el rendimiento (8.347 segundos en el paso (F) frente a 17,34 en Paso (E)) de la consulta original.

Artículos Relacionados