Hologres se integra de forma nativa con MaxCompute. Su motor lee los datos de MaxCompute directamente y utiliza el filtrado de particiones multinivel y el pushdown de operadores para acelerar las consultas.
Existen dos enfoques disponibles para acelerar las consultas de MaxCompute en Hologres:
|
Approach |
Performance gain |
Storage overhead |
Best for |
|
Importar datos a Hologres (recomendado) |
De 10 a 100 veces más rápido que las consultas directas a MaxCompute |
Requiere almacenamiento para una copia de los datos |
Consultas analíticas frecuentes, uniones con tablas internas |
|
Consultar mediante tabla externa |
De 2 a 5 veces más rápido que las consultas directas a MaxCompute |
Sin almacenamiento adicional |
Consultas ad hoc, acceso poco frecuente, conjuntos de datos grandes que no vale la pena copiar |
Las consultas a tablas externas siempre son más lentas que las consultas a tablas internas de Hologres. Si el rendimiento de las consultas es su máxima prioridad, importe los datos. Utilice tablas externas cuando el costo de almacenamiento o los requisitos de actualización de datos hagan inviable la importación.
Importar datos a Hologres (recomendado)
Importar datos de MaxCompute a una tabla interna de Hologres ofrece un rendimiento de consulta entre 10 y 100 veces superior al de las consultas a tablas externas. Utilice este enfoque cuando ejecute consultas analíticas frecuentes o necesite unir datos de MaxCompute con tablas internas de Hologres.
Para importar datos, cree una tabla interna de Hologres con una clave de distribución y una propiedad de índice adecuadas; después, use SQL para cargar los datos desde MaxCompute. Para obtener más información, consulte Import data from MaxCompute using SQL.
Consultar mediante tabla externa
Cuando importar datos no resulta práctico (por ejemplo, si los requisitos de actualización de datos son estrictos o el conjunto de datos es demasiado grande para copiarlo), consulte los datos de MaxCompute mediante tablas externas y optimice el rendimiento de estas consultas con las mejores prácticas que se describen a continuación.
|
Best practice |
When to use |
Performance impact |
|
Usar computación serverless |
ETL a gran escala, importaciones masivas, consultas en conjuntos de datos grandes |
Libera recursos de cómputo; previene errores OOM |
|
Usar el motor de ejecución HQE |
Tablas en formato ORC, Hologres V0.10+ |
Mejora del 30–100% |
|
Evitar escaneos completos de tabla |
Todas las consultas |
Reduce inmediatamente los datos escaneados |
|
Optimizar la estructura de tablas de MaxCompute para SQE |
HQE no compatible (no ORC, transaccional, Schema Evolution) |
Habilita el pruning y el pushdown de agregaciones |
|
Fusionar archivos pequeños |
Tablas con >100 archivos y tamaño promedio <64 MB |
Reduce la sobrecarga de escaneo |
|
Ajustar parámetros de consulta |
Características específicas de la carga de trabajo |
Control detallado de recursos |
Usar computación serverless
Para cargas de trabajo a gran escala, como importar grandes volúmenes de datos de MaxCompute, ejecutar trabajos de extracción, transformación y carga (ETL) o consultar tablas grandes, utilice la computación serverless (disponible en Hologres V2.1.17 y versiones posteriores).
La computación serverless aprovecha recursos de cómputo adicionales fuera de su instancia, por lo que:
Los recursos de su instancia permanecen disponibles para otras cargas de trabajo.
No es necesario reservar capacidad de cómputo adicional para cargas pico.
Los errores OOM (out-of-memory) son menos probables.
Solo se le cobra por el cómputo que utiliza la tarea.
Para obtener más información, consulte Serverless computing y Work with serverless computing.
Usar el motor de ejecución HQE
Hologres V0.10 y versiones posteriores utilizan de forma predeterminada el Hologres Query Engine (HQE) para consultas a tablas de MaxCompute, lo que mejora el rendimiento aproximadamente entre un 30% y un 100% en comparación con versiones anteriores.
HQE tiene las siguientes limitaciones:
HQE solo acelera consultas en tablas de MaxCompute con formato ORC. Otros formatos, como CFile, no son compatibles.
HQE no acelera consultas en tablas transaccionales de MaxCompute ni en tablas con Schema Evolution. En estos casos, Hologres recurre automáticamente al motor SQE.
Se requiere una data type mapping correcta entre MaxCompute y Hologres. Las discrepancias reducen el efecto de aceleración.
Evitar escaneos completos de tabla
Los escaneos completos de tabla son la causa más común de lentitud en consultas a tablas externas. Para evitarlos:
Consulte solo las columnas que necesita. Use
SELECT col1, col2 FROM tableen lugar deSELECT * FROM table.Filtre por columnas de partición. Agregue condiciones de partición en su cláusula
WHEREpara limitar el número de particiones escaneadas.
Se recomienda encarecidamente usar filtros de partición en cada consulta sobre tablas particionadas. El pruning de particiones es la forma más eficaz de reducir los datos que Hologres debe leer desde MaxCompute.
Optimizar la estructura de tablas de MaxCompute para SQE
Cuando HQE no admite una consulta, Hologres recurre al Seahawks Query Engine (SQE). Para mejorar el rendimiento de SQE, reestructure la tabla subyacente de MaxCompute. Existen dos estrategias de clustering disponibles:
|
Strategy |
Best for |
Constraint |
|
Hash clustering |
Consultas de agregación, bucket pruning |
Sin garantía contra desequilibrio de datos |
|
Range clustering |
Consultas de rango, consultas de clave compuesta, prevención de desequilibrio |
Diseño ordenado globalmente |
Convertir a una tabla con hash clustering
El hash clustering habilita el bucket pruning, la optimización de agregaciones y la optimización de almacenamiento. Al crear o modificar una tabla con CLUSTERED BY, MaxCompute aplica un hash a las columnas especificadas y distribuye los datos en buckets.
Para la clave de hash, elija columnas con pocos valores de clave duplicados.
ALTER TABLE <table_name>
[CLUSTERED BY (<col_name> [, <col_name>, ...])
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
INTO <number_of_buckets> BUCKETS];
Después de la instrucción ALTER TABLE, solo las nuevas particiones utilizan hash clustering. Para obtener más información, consulte Hash Clustering en la documentación de MaxCompute.
Convertir a una tabla con range clustering
El range clustering distribuye los datos en un diseño ordenado globalmente, lo que previene el desequilibrio de datos que puede causar el hash clustering. Su distribución ordenada crea un índice de dos niveles que admite consultas de rango y consultas de clave compuesta.
ALTER TABLE <table_name>
[RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
[INTO <number_of_buckets> BUCKETS];
Después de la instrucción ALTER TABLE, solo las nuevas particiones utilizan range clustering. Para obtener más información, consulte Range Clustering.
Las tablas con hash clustering y range clustering tienen las mismas restricciones que las tablas con hash clustering:
Use
INSERT OVERWRITEpara escribir datos.INSERT INTOno es compatible.No cargue datos en estas tablas mediante Tunnel. Los datos cargados a través de Tunnel no están ordenados y son incompatibles con los requisitos de clustering.
Compactar archivos pequeños
Un exceso de archivos pequeños en una tabla de MaxCompute ralentiza las consultas porque Hologres debe abrir y leer cada archivo individualmente. Ejecute el siguiente comando en MaxCompute para comprobar la cantidad de archivos:
DESC EXTENDED <table_name>;
En la salida, FileNum muestra el número de archivos y Size muestra el tamaño total en bytes. Si la tabla tiene más de 100 archivos y el tamaño promedio de archivo es inferior a 64 MB, fusione los archivos pequeños. Para obtener más información, consulte FAQ: Small file optimization and job diagnostics.
Para obtener orientación sobre cómo fusionar archivos, consulte FAQ about small file optimization and job diagnostics.
Ajustar parámetros de consulta
Hologres establece valores de parámetros predeterminados basados en pruebas de rendimiento internas. Estos valores predeterminados funcionan bien para la mayoría de las cargas de trabajo; modifíquelos solo si tiene una razón específica.
|
Parameter |
Default |
Notes |
|
|
512 (máximo: 1024) |
Máximo de particiones escaneadas por consulta. Un valor demasiado alto degrada el rendimiento. |
|
|
8192 |
Tamaño de lote para cada lectura desde una tabla de MaxCompute. |
|
|
64 MB |
Tamaño por split al acceder a una tabla de MaxCompute. Para tablas grandes, aumente este valor para evitar splits excesivos. Disponible en Hologres V1.1 y versiones posteriores. |
|
|
Número de vCPUs de la instancia (máximo: 128) |
Concurrencia máxima para acceso a tablas externas. Mantenga este valor bajo para evitar que las consultas a tablas externas consuman todos los recursos de otras cargas de trabajo. Disponible en Hologres V1.1 y versiones posteriores. |
|
|
32 |
Concurrencia máxima para instrucciones DML en tablas externas. Limita el consumo de recursos durante la importación y exportación de datos. Disponible en Hologres V1.1 y versiones posteriores. |
No establezca hg_foreign_table_executor_max_dop en un valor muy bajo como 1. Esto puede concentrar la carga en workers específicos durante operaciones concurrentes de lectura y escritura, lo que provoca errores OOM.
Ejemplo: Ajustar el límite máximo de particiones:
-- Default: 512. Maximum: 1024. Do not set too high.
SET hg_foreign_table_max_partition_limit = 128;
Ejemplo: Ajustar el tamaño de split para tablas grandes:
-- Default: 64 MB. Increase for large tables to reduce the number of splits.
SET hg_foreign_table_split_size = 128;
Ejemplo: Limitar la concurrencia para el acceso a tablas externas:
-- Default: number of instance cores. Maximum: 128.
SET hg_foreign_table_executor_max_dop = 32;