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 |
|
|
Sí |
Habilita o deshabilita el reflejo de datos. Valores válidos: |
|
|
No |
Aplica a tablas particionadas. Especifica la cantidad de particiones más recientes que se van a reflejar. Valores válidos: |
|
|
No |
Aplica a tablas particionadas. Especifica una lista separada por comas con los nombres de las particiones que se van a reflejar. |
|
|
No |
Especifica los recursos utilizados durante el proceso de construcción del reflejo. Valor predeterminado: |
|
|
No |
Especifica la cantidad de recursos serverless (vCPU) para el proceso de construcción del reflejo. Es obligatorio únicamente cuando |
|
|
No |
Establece una clustering key sobre los datos reflejados para acelerar las consultas por rango. |
|
|
No |
Configura la codificación de diccionario en columnas específicas para reducir el almacenamiento y agilizar las consultas sobre datos de baja cardinalidad. |
|
|
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 |
|
|
La base de datos externa donde reside la tabla reflejada. |
|
|
El esquema externo donde reside la tabla reflejada. |
|
|
La tabla externa reflejada. |
|
|
La partición que se está reflejando, si aplica. |
|
|
El tamaño de los datos reflejados correspondientes a la tabla o partición. |
|
|
La hora de inicio de la tarea de construcción del reflejo. |
|
|
La última vez que se actualizaron los datos reflejados. |
|
|
Número total de archivos en la tabla o partición de origen. |
|
|
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
Set table properties and indexes: obtenga más información sobre los tipos de índice compatibles con los datos reflejados.
OSS data lake acceleration: descripción general del servicio de aceleración de data lake.
CREATE EXTERNAL DATABASE: configure la External Database obligatoria para el reflejo de datos.