Introduite dans Hologres V3.2, la mise en miroir des tables Data Lake accélère les requêtes en synchronisant les métadonnées et les données des sources externes vers Hologres en quasi temps réel ou à intervalles planifiés. Mettez en miroir des tables entières ou des partitions spécifiques de tables partitionnées, et contrôlez l'étendue des données répliquées via des paramètres.
Fonctionnement
La mise en miroir opère à deux niveaux : les métadonnées et les données.
La mise en miroir des métadonnées démarre automatiquement lors de la première interrogation d'une table Data Lake. Hologres déclenche une tâche de synchronisation en arrière-plan qui extrait les dernières métadonnées de la table source et les met en cache localement. L'intervalle de synchronisation par défaut est d'une minute. Les requêtes suivantes exploitent le cache, ce qui évite les allers-retours répétés vers le catalogue externe.
Activez manuellement la mise en miroir des données à l'aide de ALTER EXTERNAL TABLE. Une fois activée, Hologres copie les données réelles de la table (et non pas seulement les métadonnées) dans le stockage local et les maintient synchronisées avec la source. La mise en miroir des données prend en charge :
Les tables append-only Paimon et les tables à clé primaire avec vecteurs de suppression activés
Les tables non partitionnées et les tables partitionnées, y compris des sous-ensembles de partitions spécifiques
L'évolution du schéma : ajout, suppression, réorganisation et renommage des colonnes. Les modifications de schéma non prises en charge entraînent un basculement vers la lecture directe de la table externe.
La découverte et la synchronisation automatiques des nouvelles partitions
Les index Hologres courants (clé de clustering, encodage par dictionnaire, bitmap) sur les données mises en miroir pour réduire les E/S et accélérer les requêtes
L'interrogation des données mises en miroir depuis des instances secondaires, des instances de Virtual Warehouse et des ressources serverless
La consultation de la dernière partition d'un miroir complet
La visualisation de l'utilisation du stockage du miroir aux niveaux de l'instance, de la base de données et de la table
La modification des configurations de mise en miroir des données d'une table
La désactivation de la mise en miroir des données pour une table
Quand utiliser la mise en miroir des données
La mise en miroir des données s'avère particulièrement bénéfique lorsque :
Les requêtes analysent à plusieurs reprises les mêmes tables ou partitions Data Lake
La latence réseau vers le stockage distant est élevée ou instable
Les performances des requêtes sont limitées par les E/S distantes, et non par la puissance de calcul de Hologres
Pour les tables consultées uniquement occasionnellement, la mise en miroir des métadonnées seule peut suffire.
Prérequis et limites
Avant d'activer la mise en miroir des données, assurez-vous de disposer des éléments suivants :
Data Lake Formation (DLF) activé (version latest ou ultérieure), avec des tables Apache Paimon créées.
Une instance Hologres avec le service d'accélération Data Lake activé (voir Accélération Data Lake OSS à l'aide de DLF).
Une External Database créée pour mapper les métadonnées des tables Data Lake vers Hologres (voir CREATE EXTERNAL DATABASE).
La mise en miroir des données présente les limites suivantes :
Les tables externes doivent utiliser la méthode de mappage External Database. La méthode de table étrangère n'est pas prise en charge.
Seules les tables externes dont les métadonnées sont gérées par Data Lake Formation (DLF) sont prises en charge.
La mise en miroir des données à partir des branches Apache Paimon n'est actuellement pas prise en charge.
Activer la mise en miroir des données
Syntaxe
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 [,...]]',]
);
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`data_mirroring_speed_up_enable`
|
Oui
|
Active ou désactive la mise en miroir des données. Valeurs valides : `on`, `off`.
| |
`data_mirroring_partition_num`
|
Non
|
S'applique aux tables partitionnées. Spécifie le nombre de partitions les plus récentes à mettre en miroir. Valeurs valides : `all` (toutes les partitions) ou un entier `1` à `N` (les N partitions les plus récentes).
| |
`data_mirroring_partition_list`
|
Non
|
S'applique aux tables partitionnées. Spécifie une liste séparée par des virgules des noms de partitions à mettre en miroir.
| |
`data_mirroring_guc_hg_computing_resource`
|
Non
|
Spécifie les ressources utilisées pour le processus de construction du miroir. Par défaut : `local`. Valeurs valides : `local` (ressources de l'instance actuelle) ou `serverless` (ressources Serverless).
| |
`data_mirroring_guc_hg_experimental_serverless_computing_required_cores`
|
Non
|
Spécifie le nombre de ressources serverless (vCPU) pour le processus de construction du miroir. Requis uniquement lorsque `data_mirroring_guc_hg_computing_resource` est défini sur `serverless`.
| |
`data_mirroring_clustering_key`
|
Non
|
Définit une clé de clustering sur les données mises en miroir pour accélérer les requêtes de plage.
| |
`data_mirroring_dictionary_encoding_columns`
|
Non
|
Définit l'encodage par dictionnaire sur les colonnes spécifiées pour réduire le stockage et accélérer les requêtes sur les données à faible cardinalité.
| |
`data_mirroring_bitmap_columns`
|
Non
|
Définit des index bitmap sur les colonnes spécifiées pour accélérer les requêtes de filtrage.
|
Exemples
Table non partitionnée
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'
);
Table partitionnée
Choisissez l'une des étendues de partition suivantes selon vos besoins.
Mettre en miroir les N partitions les plus récentes (recommandé pour les tables volumineuses avec des partitions temporelles) :
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'
);
Mettre en miroir toutes les partitions :
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'
);
Mettre en miroir une liste spécifique de partitions :
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'
);
Combiner partition_num et partition_list pour conserver à la fois les partitions récentes et des partitions historiques spécifiques :
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'
);
Surveiller la mise en miroir
Utilisez les outils suivants selon l'élément que vous souhaitez vérifier.
Consulter la configuration de mise en miroir
Exécutez l'instruction suivante pour lister toutes les tables pour lesquelles la mise en miroir des données est activée :
SELECT * FROM hologres.hg_datalake_get_mirror_config();
Vérifier l'état de construction du miroir
Exécutez l'instruction suivante pour vérifier l'état de construction et la progression de la synchronisation des fichiers des tâches de miroir actives :
SELECT * FROM hologres.hg_datalake_get_mirror_status();
La sortie inclut les champs suivants :
|**Champ**
|
**Description**
| | --- | --- | |
`external_db_name`
|
La base de données externe où réside la table mise en miroir.
| |
`external_schema_name`
|
Le schéma externe où réside la table mise en miroir.
| |
`external_table_name`
|
La table externe mise en miroir.
| |
`partition`
|
La partition en cours de mise en miroir, le cas échéant.
| |
`mirror_data_size`
|
La taille des données mises en miroir pour la table ou la partition.
| |
`mirror_start_time`
|
L'heure de début de la tâche de construction du miroir.
| |
`mirror_last_update_time`
|
La dernière heure de mise à jour des données mises en miroir.
| |
`total_file_count`
|
Nombre total de fichiers dans la table ou la partition source.
| |
`mirrored_file_count`
|
Nombre de fichiers déjà mis en miroir.
|
Pour estimer la progression de la synchronisation, comparez mirrored_file_count à total_file_count. Lorsque les deux valeurs sont égales, la construction du miroir est terminée.
Consulter l'historique de mise en miroir
Exécutez l'instruction suivante pour afficher l'historique de planification et d'exécution des tâches de mise en miroir pour une base de données externe spécifique :
SELECT *
FROM hologres.hg_user_datalake_mirror_cron_tasks
WHERE command::jsonb->>'external_db_name' = '<external_database_name>'
ORDER BY start_time DESC;
Remplacez <external_database_name> par le nom de votre base de données externe.
Confirmer que la requête utilise le miroir
Exécutez EXPLAIN ANALYZE sur votre requête pour vérifier si Hologres a servi les résultats à partir des données mises en miroir :
EXPLAIN ANALYZE SELECT <columns> FROM <holo_ext_db.ext_schema.ext_table>;
À la fin de la sortie, recherchez les deux lignes suivantes :
Meta mirror table count: use 1 miss 0.
Data mirror file count: use 12 miss 0.
Une valeur miss de 0 signifie que toutes les données ont été servies à partir du miroir. Si miss est supérieur à 0, certaines données ont encore été lues depuis le Data Lake distant.
Modifier la configuration du miroir
Pour mettre à jour la configuration du miroir — par exemple, pour modifier le nombre de partitions — exécutez à nouveau ALTER EXTERNAL TABLE avec les paramètres mis à jour :
ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
data_mirroring_speed_up_enable = 'on',
data_mirroring_partition_num = '12'
);
Désactiver la mise en miroir des données
Pour désactiver la mise en miroir sur une table, définissez data_mirroring_speed_up_enable sur off :
ALTER EXTERNAL TABLE <holo_ext_db.ext_schema.ext_table>
SET(
data_mirroring_speed_up_enable = 'off'
);
Après la désactivation de la mise en miroir, Hologres arrête la synchronisation des données et les requêtes accèdent directement au Data Lake. Les fichiers de données mis en miroir localement sont supprimés de manière asynchrone dans un délai de 30 minutes.
Étapes suivantes
Définir les propriétés de table et les index — en savoir plus sur les types d'index pris en charge sur les données mises en miroir
Accélération Data Lake OSS — aperçu du service d'accélération Data Lake
CREATE EXTERNAL DATABASE — configurer l'External Database requise pour la mise en miroir des données