Todos los productos
Search
Centro de documentos

Hologres:Accelerate MaxCompute queries

Última actualización: Sep 05, 2026

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

Nota

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 table en lugar de SELECT * FROM table.

  • Filtre por columnas de partición. Agregue condiciones de partición en su cláusula WHERE para 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.

Importante

Las tablas con hash clustering y range clustering tienen las mismas restricciones que las tablas con hash clustering:

  • Use INSERT OVERWRITE para escribir datos. INSERT INTO no 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

hg_foreign_table_max_partition_limit

512 (máximo: 1024)

Máximo de particiones escaneadas por consulta. Un valor demasiado alto degrada el rendimiento.

hg_experimental_query_batch_size

8192

Tamaño de lote para cada lectura desde una tabla de MaxCompute.

hg_foreign_table_split_size

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.

hg_foreign_table_executor_max_dop

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.

hg_foreign_table_executor_dml_max_dop

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.

Importante

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;