Hologres V3.2 et versions ultérieures permettent d'accéder aux données du catalogue Data Lake Formation (DLF) via Paimon REST. Une fois la connexion établie, vous pouvez interroger directement les tables Paimon depuis Hologres, utiliser le voyage dans le temps pour inspecter des snapshots historiques, lire des branches spécifiques et charger les données de manière incrémentielle dans des tables dynamiques.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un service DLF actif avec au moins un catalogue. Consultez les rubriques Accorder des autorisations et activer DLF et Data Catalog.
Une instance Hologres avec le service d'accélération du lac de données activé. L'instance doit se trouver dans la même région que DLF. Reportez-vous à la section Configuration de l'environnement.
Limites
L'écriture dans les tables Paimon n'est pas prise en charge. Les opérations INSERT, UPDATE, DELETE et TRUNCATE ne sont pas disponibles.
Les requêtes de voyage dans le temps, les requêtes par branche et la mise en miroir des données sont uniquement disponibles pour les tables Paimon mappées via une base de données externe, et non via un serveur distant.
Le voyage dans le temps n'est pas pris en charge sur les tables ayant subi une évolution de schéma ni sur les tables dynamiques.
La mise en miroir des données ne prend pas en charge les tables Paimon dotées de clés primaires.
La lecture des partitions par défaut où la clé de partition est NULL ou vide n'est pas prise en charge.
La fonctionnalité d'accélération du lac de données OSS dans HoloWeb ne permet pas de créer visuellement un catalogue DLF.
La fonctionnalité d'accélération du lac de données ne peut pas être activée pour les instances secondaires en lecture seule.
Choisir un mode d'authentification
Hologres prend en charge deux modes pour authentifier l'accès à un catalogue DLF :
| Mode | Quand l'utiliser |
|---|---|
| SLR (rôle lié au service) | Mode par défaut. À utiliser pour accéder aux données sous votre identité Alibaba Cloud actuelle. Hologres gère automatiquement l'autorisation interservices via le transfert d'identité. |
| STS (Security Token Service) | À utiliser pour un accès intercomptes ou lorsqu'un compte BASIC Hologres nécessite un accès à DLF. Requiert un rôle RAM et un mappage utilisateur explicite. |
Privilégiez le mode SLR sauf si un accès intercomptes ou la prise en charge des comptes BASIC est nécessaire.
Mapper un catalogue à l'aide d'une base de données externe
Mode SLR
Un rôle lié au service (SLR) est un rôle RAM qui autorise un service Alibaba Cloud à accéder à d'autres services en votre nom. Hologres crée et gère le SLR automatiquement ; aucune configuration manuelle du rôle n'est requise. Consultez la rubrique Rôle lié au service.
-
Connectez-vous à une instance Hologres et créez une base de données externe.
Paramètre Obligatoire Description catalog_typeOui Toujours paimonpour les tables Paimon.metastore_typeOui Toujours dlf-restlors de la connexion via DLF.dlf_catalogOui Le nom de votre catalogue DLF. commentNon Une description de la base de données externe. CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon' metastore_type 'dlf-rest' dlf_catalog '<dlf_catalog_name>' comment 'Catalog on dlf' ; -
Consultez les schémas et les tables de la base de données externe.
-- List schemas in the external database SELECT * FROM hologres.hg_external_schemas('<ext_database_name>'); -- List tables in a specific schema SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>'); -
Interrogez les données.
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Mode STS
Le Security Token Service (STS) émet des informations d'identification temporaires avec des autorisations et des périodes de validité configurables. Utilisez ce mode lorsqu'un utilisateur RAM ou un compte BASIC d'un autre compte doit accéder aux données DLF via Hologres.
Dans la console RAM, créez un rôle RAM et attachez-lui l'autorisation AliyunDLFFullAccess ou AliyunDLFReadOnlyAccess. Consultez la rubrique Créer un rôle RAM et accorder des autorisations.
-
Modifiez la politique de confiance du rôle RAM pour autoriser Hologres à l'assumer. Consultez la rubrique Modifier la politique de confiance d'un rôle RAM.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" } Dans la console Data Lake Formation, accordez au rôle RAM l'accès aux bases de données et aux tables concernées. Consultez la rubrique Gestion des autorisations.
-
Dans Hologres, créez une base de données externe et référencez le rôle RAM.
Paramètre Obligatoire Description catalog_typeOui Toujours paimonpour les tables Paimon.metastore_typeOui Toujours dlf-restlors de la connexion via DLF.dlf_catalogOui Le nom de votre catalogue DLF. rolearnOui Le nom de ressource Alibaba Cloud (ARN) du rôle RAM créé à l'étape 1. Format : acs:ram::<account-id>:role/<role-name>.commentNon Une description de la base de données externe. CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon' metastore_type 'dlf-rest' dlf_catalog '<dlf_catalog_name>' rolearn 'acs:ram::106380604****:role/***-ramrole' comment 'Catalog on dlf' ; -
Créez un mappage utilisateur pour lier l'utilisateur RAM ou le compte BASIC au rôle RAM.
Pour plus d'informations sur les mappages utilisateurs, consultez CREATE USER MAPPING . Pour créer un utilisateur RAM, consultez Create a RAM user . Pour créer un compte BASIC, consultez Gestion des utilisateurs .
CREATE USER MAPPING FOR "<RAM_user|BASIC_account>" EXTERNAL DATABASE <ext_database_name> OPTIONS ( rolearn 'acs:ram::10638060***:role/***ramrole' ); -
Connectez-vous en tant qu'utilisateur RAM via la console de gestion Hologres, ou connectez-vous en utilisant le compte BASIC, puis interrogez les données.
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Accélérer les requêtes grâce à la mise en miroir des tables de lac
Hologres V3.2 et versions ultérieures prennent en charge la mise en miroir des tables de lac, qui synchronise les métadonnées et les données d'une source de données externe vers Hologres, soit en temps quasi réel, soit à intervalles réguliers. La mise en miroir prend en charge les tables complètes et des partitions spécifiques des tables partitionnées. Consultez la rubrique Mise en miroir des tables de lac.
Opérations sur les schémas externes
Créer un schéma externe
La création d'un schéma externe génère une base de données correspondante dans le catalogue DLF.
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] <ext_database_name>.<ext_schema_name>;
Actualiser les métadonnées du schéma
REFRESH CACHE FOR EXTERNAL SCHEMA <ext_database_name>.<ext_schema_name> WITH (cache_level = 'metadata');
Supprimer un schéma externe
La suppression d'un schéma externe retire la base de données correspondante et toutes ses tables du catalogue DLF. Cette opération est irréversible.
DROP EXTERNAL SCHEMA [IF NOT EXISTS] <ext_database_name>.<ext_schema_name>;
Répertorier les tables d'un schéma
SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>');
Opérations sur les tables externes
Créer une table externe
-- Non-partitioned table
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name>(
id TEXT,
created_at BIGINT,
type TEXT,
actor_id TEXT,
actor_login TEXT,
repo_id TEXT,
repo_name TEXT,
org TEXT,
org_login TEXT,
PRIMARY KEY(id)
) WITH (
"changelog-producer"='input',
"bucket"=6,
"bucket-key"='id'
);
-- Partitioned table
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name>(
id TEXT,
created_at BIGINT,
type TEXT,
actor_id TEXT,
actor_login TEXT,
repo_id TEXT,
repo_name TEXT,
org TEXT,
org_login TEXT
)
LOGICAL PARTITION BY LIST(created_at)
WITH (
"file_format" = 'orc',
"bucket"=6,
"bucket-key"='id'
);
Actualiser les métadonnées de la table
REFRESH CACHE FOR EXTERNAL TABLE <ext_db_name>.<ext_schema_name>.<ext_table_name> WITH (cache_level = 'metadata');
Supprimer une table externe
La suppression d'une table externe retire la table du catalogue DLF. Cette opération est irréversible.
DROP EXTERNAL TABLE IF EXISTS <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Collecter les statistiques de la table
Les commandes ANALYZE et AUTO ANALYZE collectent des statistiques sur les colonnes que l'optimiseur de requêtes utilise pour générer des plans de requête efficaces. Consultez la rubrique ANALYZE et AUTO ANALYZE.
-- Collect statistics for all columns
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Collect statistics for specific columns (higher sample rate — use for columns with conditional filters)
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>(<colname>, <colname>);
-- Enable auto-analyze for the external database
ALTER EXTERNAL DATABASE <ext_database_name> WITH enable_auto_analyze 'true';
Requêtes de voyage dans le temps
Hologres V3.2 et versions ultérieures permettent d'interroger des snapshots historiques de tables Paimon. Les trois approches utilisent la syntaxe FOR ... AS OF :
-- Query by timestamp
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR TIMESTAMP AS OF '<timestamp>';
-- Query by version (version = snapshot ID for Paimon tables)
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR VERSION AS OF '<version>';
-- Query by tag
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR TAG AS OF '<tag>';
Pour identifier les snapshots ou les tags disponibles, interrogez d'abord les tables système Paimon.
Interroger la table système Snapshots
SELECT * FROM hologres.hg_list_snapshots('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
Le résultat correspond à la table système Snapshots de Paimon comme suit :
| Champ | Type | Description | Champ Paimon |
|---|---|---|---|
branch_name |
TEXT | Nom de la branche | branch_name |
snapshot_id |
TEXT | ID du snapshot | snapshot_id |
schema_id |
TEXT | ID du schéma de la table | schema_id |
commit_kind |
TEXT | Type de validation | commit_kind |
commit_time |
TIMESTAMPTZ | Heure de validation | commit_time |
extend_info |
TEXT (JSON) | Autres propriétés du snapshot Paimon | — |
Pour répertorier les ID de snapshot disponibles, utilisez hg_list_versions :
SELECT * FROM hologres.hg_list_versions('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
Interroger la table système Tags
SELECT * FROM hologres.hg_list_tags('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
| Champ | Type | Description | Champ Paimon |
|---|---|---|---|
branch_name |
TEXT | Nom de la branche | branch_name |
tag_name |
TEXT | Nom du tag | tag_name |
snapshot_id |
TEXT | ID du snapshot | snapshot_id |
schema_id |
TEXT | ID du schéma de la table | schema_id |
commit_time |
TIMESTAMPTZ | Heure de validation | commit_time |
extend_info |
TEXT (JSON) | Autres propriétés du tag Paimon | — |
Requêtes par branche
Hologres V3.2 et versions ultérieures permettent d'interroger les données d'une branche spécifique d'une table Paimon.
Répertorier les branches
SELECT * FROM hologres.hg_list_branches('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
| Champ | Type | Description | Champ Paimon |
|---|---|---|---|
branch_name |
TEXT | Nom de la branche | branch_name |
create_time |
TIMESTAMPTZ | Heure de création de la branche | create_time |
extend_info |
TEXT (JSON) | Autres propriétés de la branche Paimon | — |
Interroger les données d'une branche
-- Query the current state of a branch
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>';
-- Query a historical snapshot of a branch by timestamp
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>' TIMESTAMP AS OF '<timestamp>';
-- Query a historical snapshot of a branch by tag
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>' TAG AS OF '<tag_name>';
Si la propriété scan.fallback-branch est définie sur une table Paimon et qu'une partition est absente de la branche actuelle, Hologres lit automatiquement cette partition depuis la branche de secours. Consultez Manage Branch pour plus de détails.
Accéder aux tables Paimon via un serveur distant
En alternative aux bases de données externes, vous pouvez utiliser un serveur distant et des tables distantes pour accéder aux données Paimon. Cette approche s'appuie sur l'interface standard PostgreSQL Foreign Data Wrapper (FDW).
Les requêtes de voyage dans le temps, les requêtes par branche et la mise en miroir des données ne sont pas disponibles via les tables distantes. Utilisez les bases de données externes pour bénéficier de ces fonctionnalités.
-
Créez un serveur distant.
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS ( catalog_type 'paimon', metastore_type 'dlf-rest', dlf_catalog '<dlf_catalog_name>' );Pour connaître les autres options de serveur, consultez la rubrique Autres opérations sur les serveurs distants (SQL).
-
Créez des tables distantes en utilisant l'une des méthodes suivantes. Option 1 : Importer un schéma entier en une seule fois
IMPORT FOREIGN SCHEMA <dlf_db_name> FROM SERVER <server_name> INTO <holo_schema_name> OPTIONS (if_table_exist 'update');Consultez la rubrique IMPORT FOREIGN SCHEMA. Option 2 : Créer des tables individuelles
CREATE FOREIGN TABLE <foreign_table_name> ( { column_name data_type } [, ... ] ) SERVER <server_name> OPTIONS ( schema_name '<dlf_db_name>', table_name '<dlf_table_name>' );Consultez la rubrique CREATE FOREIGN TABLE.
Lire les données Paimon à l'aide de tables dynamiques
Une table dynamique actualise automatiquement son contenu à partir d'une ou plusieurs tables de base selon un planning configurable. Hologres V3.0 et versions ultérieures prennent en charge les tables distantes MaxCompute et les tables distantes DLF comme tables de base pour les tables dynamiques. Consultez la rubrique Table dynamique.
Les trois modes d'actualisation utilisent la même structure CREATE DYNAMIC TABLE . Le paramètre auto_refresh_mode contrôle la manière dont les données sont lues depuis la source Paimon.
-- Full refresh: re-reads all data on each cycle
CREATE DYNAMIC TABLE paimon_dt_full
WITH (
auto_refresh_mode = 'full',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Incremental refresh: reads only new or changed data
CREATE DYNAMIC TABLE paimon_dt_incremental
WITH (
auto_refresh_mode = 'incremental',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Auto mode: Hologres selects full or incremental refresh based on data characteristics
CREATE DYNAMIC TABLE paimon_dt_auto
WITH (
auto_refresh_mode = 'auto',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;