Mejora de las consultas de la colmena con índices
Creación de un índice es una práctica común con las 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 muy grandes, y como ahora, sin duda sabe, Colmena prospera en tablas grandes.
Como era de esperar, Colmena apoya 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 finalmente madurará. Aún con 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 maneras: 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 de la Colmena. En segundo lugar, las opciones de almacenamiento de las columnas orientadas pueden ser muy útiles. Recuerde que el formato de archivo de ORC es nueva como de colmena 0.11.
En tercer lugar, usted puede particionar tablas. En cuarto lugar, la comunidad 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 indexar el 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 reconstruc- DIFERIDO (B) ALTER INDEX f08_index EN flightinfo2008 reconstruc- (C) de la colmena (FlightData)> VER EN ÍNDICES FlightInfo2008-OKf08indexflightinfo2008 origen flightdata__flightinfo2008_f08index__ compactTime tomada: 0.079 segundo, fue a buscar: 1 fila (s) (D) de las colmenas (FlightData)> DESCRIBE flightdata__flightinfo2008_f08index __- OKorigin cadena string_offsetsarray None_bucketnameTiempo necesario: 0.112 segundos, fue a buscar: 3 fila (s) (E) de la colmena (FlightData)> Origen SELECT, COUNT (1) DE flightinfo2008 DONDE GRUPO Origen = 'SYR' POR Origen-SYR 12032Time tomada: 17.34 segundos, recuperados de: 1 fila (s) (F) de las colmenas (FlightData)> Origen SELECT, TAMAÑO (`_offsets`) DESDE DONDE flightdata__flightinfo2008_f08index__ origen = 'SYR'-SYR 12032Time tomada: 8.347 segundos, recuperados de: 1 fila (s) (G) de la colmena (FlightData )> DESCRIBE flightdata__flightinfo2008_f08index __- cadena OKorigin string_offsetsarray None_bucketname Tiempo necesario: 0,12 segundos, fue a buscar: 3 fila (s)
Paso (A) crea el índice a través del "COMPACT'Manejador de índice en el Procedencia columna. Hive también ofrece un manejador 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 instruye colmena para crear primero un paso indexación vacío (B) es donde realmente se construye el índice con la ALTER INDEX ... REBUILD comandos. Índice diferido construye puede ser muy útil en los flujos de trabajo donde un proceso crea las tablas e índices, otra carga los datos y construye los índices y un proceso final realiza análisis de datos.
Hive no prevé el mantenimiento de índices automática, por lo que necesita para reconstruir el índice si sobrescribir o anexar datos a la tabla. Además, los índices Hive soportan particiones de tabla, por lo que una reconstrucción puede limitarse a una partición. Paso (C) ilustra cómo se puede enumerar o mostrar los índices creados en una tabla en particular.
Paso (D) ilustra un punto importante con respecto a los índices de la colmena: índices 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, puede utilizar índices en al menos dos maneras:
Cuente con que el sistema utilice automáticamente índices que cree.
Vuelva a escribir algunas consultas para aprovechar la nueva tabla de índices.
El uso automático de índices está progresando, pero este aspecto es un trabajo en progreso. Centrándose en la segunda opción, en el paso (E) se escribe una consulta que busca determinar cómo salieron muchos vuelos del aeropuerto Siracusa durante el año 2008. Para obtener esta información, a aprovechar la CUENTA función de agregado.
Se puede ver que Hive tomó 17.32 segundos en la máquina virtual para informar que 12.032 vuelos se originaron en Syracuse, Nueva York.
En la etapa (f), a aprovechar la nueva tabla de índices y utilizar el TAMAÑO funcionar en su lugar. Paso (F) tiene más sentido después de estudiar el paso (D): Paso (D) que muestra lo que una tabla de índices parece, donde los registros 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 pregunta en el Paso (F) tiene sentido. Todo Hive tiene que hacer es encontrar la SYR origen (por Syracuse) en el flightdata__flightinfo2008_f08index__ Y mesa luego contar las filas de la _offsets' matriz para obtener el número de vuelos - una forma sencilla pero elegante para duplicar el rendimiento (8.347 segundos en el paso (F) frente a 17,34 en Paso (E)) de la consulta original.