Todos los productos
Search
Centro de documentos

Hologres:Reflejo de datos

Última actualización: Sep 18, 2026

El reflejo de tablas de data lake, introducido en Hologres V3.2, acelera las consultas sobre estas tablas al sincronizar metadatos y datos desde fuentes externas hacia Hologres en tiempo casi real o en intervalos programados. Es posible reflejar tablas completas o particiones específicas de tablas particionadas. Además, se controla el alcance de los datos reflejados mediante parámetros.

Funcionamiento

El reflejo opera en dos niveles: metadatos y datos.

El reflejo de metadatos se inicia automáticamente la primera vez que se consulta una tabla de data lake. Hologres activa una tarea de sincronización en segundo plano que extrae los metadatos más recientes de la tabla de origen y los almacena en caché de forma local. El intervalo de sincronización predeterminado es de un minuto. Las consultas posteriores utilizan los metadatos almacenados en caché, lo que elimina los viajes de ida y vuelta repetidos hacia el catálogo externo.

El reflejo de datos se debe habilitar manualmente con el comando ALTER EXTERNAL TABLE. Una vez habilitado, Hologres copia los datos reales de la tabla (no solo los metadatos) al almacenamiento local y los mantiene sincronizados con el origen. El reflejo de datos es compatible con las siguientes características:

  • Tablas de tipo append-only y tablas con clave primaria de Paimon que tienen habilitados los vectores de eliminación.

  • Tablas sin particiones y tablas particionadas, incluidos subconjuntos específicos de particiones.

  • Evolución del esquema: adición, eliminación, reordenamiento y cambio de nombre de columnas. Los cambios de esquema no compatibles recurren a la lectura directa de la tabla externa.

  • Detección y sincronización automática de nuevas particiones.

  • Índices comunes de Hologres (clustering key, codificación de diccionario y bitmap) aplicados sobre los datos reflejados para reducir la E/S y acelerar las consultas.

  • Consultas de datos reflejados desde instancias secundarias, instancias de virtual warehouse y recursos serverless.

  • Visualización de la partición más reciente de un reflejo completo.

  • Consulta del uso de almacenamiento del reflejo a nivel de instancia, base de datos y tabla.

  • Modificación de la configuración de reflejo de datos de una tabla.

  • Deshabilitación del reflejo de datos para una tabla.

Cuándo usar el reflejo de datos

El reflejo de datos ofrece su mayor ventaja cuando se cumplen las siguientes condiciones:

  • Las consultas examinan repetidamente las mismas tablas o particiones de data lake.

  • La latencia de red hacia el almacenamiento remoto es alta o inestable.

  • El rendimiento de las consultas está limitado por la E/S remota y no por la capacidad de cómputo de Hologres.

Para las tablas a las que se accede solo de manera ocasional, el reflejo de metadatos puede ser suficiente.

Requisitos previos y limitaciones

Antes de habilitar el reflejo de datos, asegúrese de contar con lo siguiente:

  • Data Lake Formation (DLF) en su versión más reciente o posterior activado, con tablas de Apache Paimon creadas.

  • Una instancia de Hologres con el servicio de aceleración de data lake habilitado (consulte OSS data lake acceleration using DLF).

  • Una External Database creada para asignar los metadatos de la tabla de data lake a Hologres (consulte CREATE EXTERNAL DATABASE).

El reflejo de datos presenta las siguientes limitaciones:

  • Las tablas externas deben utilizar el método de asignación de External Database. El método de foreign table no es compatible.

  • Solo son compatibles las tablas externas cuyos metadatos gestiona Data Lake Formation (DLF).

  • Actualmente no se admite el reflejo de datos desde ramas de Apache Paimon.

Habilitar el reflejo de datos

Sintaxis

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
SET(
   -- Enable data mirroring
  data_mirroring_speed_up_enable = 'on|off', 
  [data_mirroring_partition_num='1~N|all',] |[data_mirroring_partition_list='pt1,pt2...',] 
  
  -- Assign resources to data mirroring
  [data_mirroring_guc_hg_computing_resource='[serverless | local]',]
  [data_mirroring_guc_hg_experimental_serverless_computing_required_cores='<num>',] 

  -- Index
  [data_mirroring_clustering_key='[columnName{:asc]} [,...]]',]
  [data_mirroring_dictionary_encoding_columns='[columnName [,...]]',]
  [data_mirroring_bitmap_columns='[columnName [,...]]',]
  );

Parámetros

Parameter

Required

Description

data_mirroring_speed_up_enable

Sí

Habilita o deshabilita el reflejo de datos. Valores válidos: on, off.

data_mirroring_partition_num

No

Aplica a tablas particionadas. Especifica la cantidad de particiones más recientes que se van a reflejar. Valores válidos: all (todas las particiones) o un número entero de 1 a N (las N particiones más recientes).

data_mirroring_partition_list

No

Aplica a tablas particionadas. Especifica una lista separada por comas con los nombres de las particiones que se van a reflejar.

data_mirroring_guc_hg_computing_resource

No

Especifica los recursos utilizados durante el proceso de construcción del reflejo. Valor predeterminado: local. Valores válidos: local (recursos de la instancia actual) o serverless (recursos serverless).

data_mirroring_guc_hg_experimental_serverless_computing_required_cores

No

Especifica la cantidad de recursos serverless (vCPU) para el proceso de construcción del reflejo. Es obligatorio únicamente cuando data_mirroring_guc_hg_computing_resource se establece en serverless.

data_mirroring_clustering_key

No

Establece una clustering key sobre los datos reflejados para acelerar las consultas por rango.

data_mirroring_dictionary_encoding_columns

No

Configura la codificación de diccionario en columnas específicas para reducir el almacenamiento y agilizar las consultas sobre datos de baja cardinalidad.

data_mirroring_bitmap_columns

No

Define índices bitmap en columnas específicas para acelerar las consultas con filtros.

Ejemplos

Tabla sin particiones

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  -- Enable data mirroring
  data_mirroring_speed_up_enable = 'on',

  -- Specify the resources for the mirror build process
  data_mirroring_guc_hg_computing_resource = 'local',

  -- Set indexes
  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Tabla particionada

Elija uno de los siguientes alcances de partición según sus necesidades.

Reflejar las N particiones más recientes (recomendado para tablas grandes con particiones basadas en tiempo):

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = '7',

  -- Use Serverless resources for the mirror build process
  data_mirroring_guc_hg_computing_resource = 'serverless',
  data_mirroring_guc_hg_experimental_serverless_computing_required_cores = '16',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Reflejar todas las particiones:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = 'all',

  data_mirroring_guc_hg_computing_resource = 'local',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Reflejar una lista específica de particiones:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_list = 'pt1,pt2',

  data_mirroring_guc_hg_computing_resource = 'local',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Combinar partition_num y partition_list para conservar tanto las particiones recientes como particiones históricas específicas:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = '7',
  data_mirroring_partition_list = 'pt1',

  data_mirroring_guc_hg_computing_resource = 'local',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Supervisar el reflejo

Utilice las siguientes herramientas según lo que necesite comprobar.

Consultar la configuración de reflejo

Ejecute la siguiente instrucción para listar todas las tablas que tienen habilitado el reflejo de datos:

SELECT * FROM hologres.hg_datalake_get_mirror_config();

Comprobar el estado de construcción del reflejo

Ejecute la siguiente instrucción para comprobar el estado de construcción y el progreso de sincronización de archivos de las tareas de reflejo activas:

SELECT * FROM hologres.hg_datalake_get_mirror_status();

El resultado incluye los siguientes campos:

Field

Description

external_db_name

La base de datos externa donde reside la tabla reflejada.

external_schema_name

El esquema externo donde reside la tabla reflejada.

external_table_name

La tabla externa reflejada.

partition

La partición que se está reflejando, si aplica.

mirror_data_size

El tamaño de los datos reflejados correspondientes a la tabla o partición.

mirror_start_time

La hora de inicio de la tarea de construcción del reflejo.

mirror_last_update_time

La última vez que se actualizaron los datos reflejados.

total_file_count

Número total de archivos en la tabla o partición de origen.

mirrored_file_count

Número de archivos que se han reflejado hasta el momento.

Para estimar el progreso de la sincronización, compare mirrored_file_count con total_file_count. Cuando ambos valores coinciden, la construcción del reflejo ha finalizado.

Consultar el historial de reflejo

Ejecute la siguiente instrucción para consultar el historial de programación y ejecución de las tareas de reflejo correspondientes a una base de datos externa específica:

SELECT *
FROM hologres.hg_user_datalake_mirror_cron_tasks
WHERE command::jsonb->>'external_db_name' = '<external_database_name>'
ORDER BY start_time DESC;

Reemplace <external_database_name> con el nombre de su base de datos externa.

Confirmar que la consulta utiliza el reflejo

Ejecute EXPLAIN ANALYZE sobre su consulta para comprobar si Hologres entregó los resultados a partir de los datos reflejados:

EXPLAIN ANALYZE SELECT <columns> FROM <holo_ext_db.ext_schema.ext_table>;

Al final del resultado, busque las siguientes dos líneas:

Meta mirror table count: use 1 miss 0.
Data mirror file count: use 12 miss 0.

Un valor de miss igual a 0 significa que todos los datos se sirvieron desde el reflejo. Si miss es mayor que 0, parte de los datos todavía se leyeron desde el data lake remoto.

Modificar la configuración del reflejo

Para actualizar la configuración del reflejo (por ejemplo, cambiar el número de particiones), ejecute nuevamente ALTER EXTERNAL TABLE con los parámetros actualizados:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = '12'
);

Deshabilitar el reflejo de datos

Para deshabilitar el reflejo en una tabla, establezca data_mirroring_speed_up_enable en off:

ALTER EXTERNAL TABLE <holo_ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'off'
);

Una vez deshabilitado el reflejo, Hologres detiene la sincronización de datos y las consultas acceden directamente al data lake. Los archivos de datos reflejados de forma local se eliminan de manera asíncrona en un plazo de 30 minutos.

Pasos siguientes