Hologres accélère les requêtes sur votre data lake OSS en s'appuyant sur Alibaba Cloud Data Lake Formation (DLF) et Object Storage Service (OSS), offrant ainsi un accès flexible aux données et un traitement efficace. Cette rubrique explique comment utiliser DLF 1.0 pour lire et écrire des données dans OSS depuis Hologres.
Prérequis
Activez DLF 1.0 . Pour plus d'informations, consultez la section Getting Started. Pour connaître les régions où DLF est disponible, reportez-vous à la page Data Lake Formation: Supported regions and endpoints.
Activez OSS et préparez vos données. Pour en savoir plus, consultez le guide Get started with OSS.
Accordez les autorisations nécessaires pour accéder à OSS. Le compte utilisé pour interroger une table externe doit disposer de ces autorisations. À défaut, les requêtes échoueront même si la table est créée. Pour savoir comment attribuer des autorisations sur OSS, consultez la section Bucket Policy (OSS SDK for Java 1.0).
(Facultatif) Pour utiliser la fonctionnalité OSS-HDFS, activez le service OSS-HDFS. Pour plus d'informations, consultez la section Enable OSS-HDFS and grant access permissions.
Notes d'utilisation
Lorsque vous exportez des données depuis Hologres vers OSS, seule la commande
INSERT INTOest prise en charge. Les commandesINSERT ON CONFLICT,UPDATEetDELETEne sont pas prises en charge.L'écriture de données dans OSS n'est possible qu'avec Hologres V1.3 ou version ultérieure. Cette fonctionnalité prend uniquement en charge les formats ORC, Parquet, CSV et SequenceFile.
L'accélération du data lake n'est pas prise en charge sur les instances secondaires en lecture seule.
L'instruction
IMPORT FOREIGN SCHEMApermet d'importer des tables partitionnées stockées dans OSS. Hologres peut interroger au maximum 512 partitions simultanément. Ajoutez des filtres de partition pour veiller à ce qu'une requête unique ne dépasse pas cette limite.Lorsque vous interrogez des données dans un data lake, les partitions spécifiées dans la requête sont chargées depuis la table externe vers la mémoire et le cache de Hologres pour le calcul. Afin de garantir une expérience fluide, le volume de données accédé par les filtres de partition lors d'une seule requête ne doit pas excéder 200 Go.
Les commandes
UPDATE,DELETEetTRUNCATEne sont pas prises en charge pour les tables externes.La nouvelle version de DLF ne prend pas en charge l'accélération du data lake OSS. Cette fonctionnalité est disponible uniquement dans DLF 1.0 (DLF-Legacy).
Procédure
Configuration de l'environnement
-
Activez la configuration backend DLF_FDW pour votre instance Hologres.
Accédez à la console Hologres. Sur la page Instances ou Instance Details, repérez l'instance cible et cliquez sur Actions dans la colonne Lake Acceleration. Après confirmation de l'opération, le système configure automatiquement DLF_FDW et redémarre l'instance. Le service est disponible une fois l'instance redémarrée.
RemarqueLa fonctionnalité en libre-service permettant d'activer la configuration backend DLF_FDW dans la console Hologres est en cours de déploiement. Si vous ne voyez pas le bouton Lake Acceleration, reportez-vous à la section Common errors when preparing for an upgrade ou rejoignez le groupe DingTalk Hologres pour fournir vos commentaires. Pour plus d'informations, consultez la section How do I get more online support?.
Une fois DLF_FDW activé, la fonctionnalité utilise les ressources système existantes (actuellement 1 cœur et 4 Go de mémoire) par défaut. Aucun achat de ressources supplémentaire n'est requis.
-
Créez une extension.
Un superutilisateur doit exécuter l'instruction suivante une fois par base de données pour créer l'extension. Cela vous permettra de lire les données depuis OSS en utilisant DLF 1.0.
CREATE EXTENSION IF NOT EXISTS dlf_fdw; -
Créez un serveur externe.
ImportantVous devez utiliser un compte superutilisateur pour créer un serveur externe afin d'éviter les problèmes d'autorisations.
Hologres prend en charge la fonctionnalité Multi-Catalog de DLF 1.0. Si vous ne disposez que d'un seul cluster EMR, vous pouvez utiliser le catalogue DLF 1.0 par défaut. Si vous avez plusieurs clusters EMR, vous pouvez utiliser des catalogues de données personnalisés pour lier votre instance Hologres à différents clusters EMR. Vous pouvez également choisir OSS natif ou OSS-HDFS comme source de données. Les sections suivantes détaillent les configurations.
-
Utilisez le catalogue par défaut de DLF 1.0 et le stockage OSS natif pour créer un serveur. Syntaxe d'exemple :-- Afficher les serveurs existants. meta_warehouse_server et odps_server sont des serveurs intégrés qui ne peuvent pas être modifiés ni supprimés.
SELECT * FROM pg_foreign_server;
-- Supprimer un serveur existant.
DROP SERVER SERVER_NAME CASCADE;
-- Créer un serveur.
CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
dlf_region 'REGION_ID',
dlf_endpoint 'dlf-share.REGION_ID.aliyuncs.com',
oss_endpoint 'oss-REGION_ID-internal.aliyuncs.com'
);
-
Utilisez OSS-HDFS comme stockage de data lake.
-
Déterminez le point de terminaison OSS-HDFS.
Dans la console OSS, vous trouverez le point de terminaison sur la page de présentation du bucket pour lequel OSS-HDFS est activé.
Dans le tableau des ports d'accès, repérez le point de terminaison dans la colonne Bucket domain correspondant à la ligne HDFS service. Le point de terminaison suit le format
<BucketName>.cn-hangzhou.oss-dls.aliyuncs.com. -
Créez un serveur externe et configurez son point de terminaison.
Une fois le nom de domaine du bucket confirmé, vous pouvez configurer l'option DLF_FDW OSS_Endpoint dans Hologres. La syntaxe d'exemple est la suivante.
CREATE EXTENSION IF NOT EXISTS dlf_fdw; CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS ( dlf_region 'REGION_ID', dlf_endpoint 'dlf-share.REGION_ID.aliyuncs.com', oss_endpoint 'BUCKET_NAME.REGION_ID.oss-dls.aliyuncs.com' -- The endpoint of the OSS-HDFS bucket. ); -
Paramètres
Parameter
Description
Example
SERVER_NAME
Le nom personnalisé du serveur.
dlf_server
dlf_region
La région où se trouve DLF 1.0.
-
Chine (Pékin) :
cn-beijing. -
Chine (Hangzhou) :
cn-hangzhou. -
Chine (Shanghai) :
cn-shanghai. -
Chine (Shenzhen) :
cn-shenzhen. -
Chine (Zhangjiakou) :
cn-zhangjiakou. -
Singapour :
ap-southeast-1. -
Allemagne (Francfort) :
eu-central-1. -
États-Unis (Virginie) :
us-east-1. -
Indonésie (Jakarta) :
ap-southeast-5.
cn-hangzhou
dlf_endpoint
Nous vous recommandons d'utiliser le point de terminaison interne de DLF 1.0 pour de meilleures performances d'accès.
-
Chine (Pékin) :
dlf-share.cn-beijing.aliyuncs.com. -
Chine (Hangzhou) :
dlf-share.cn-hangzhou.aliyuncs.com -
Chine (Shanghai) :
dlf-share.cn-shanghai.aliyuncs.com. -
Chine (Shenzhen) :
dlf-share.cn-shenzhen.aliyuncs.com. -
Chine (Zhangjiakou) :
dlf-share.cn-zhangjiakou.aliyuncs.com. -
Singapour :
dlf-share.ap-southeast-1.aliyuncs.com. -
Allemagne (Francfort) :
dlf-share.eu-central-1.aliyuncs.com. -
États-Unis (Virginie) :
dlf-share.us-east-1.aliyuncs.com. -
Indonésie (Jakarta) :
dlf-share.ap-southeast-5.aliyuncs.com.
dlf-share.cn-shanghai.aliyuncs.comoss_endpoint
-
Pour le stockage OSS natif, nous vous recommandons d'utiliser le point de terminaison interne d'OSS pour de meilleures performances d'accès.
-
OSS-HDFS prend uniquement en charge l'accès via le réseau interne.
-
OSS
oss-cn-shanghai-internal.aliyuncs.com -
OSS-HDFS
cn-hangzhou.oss-dls.aliyuncs.com
-
-
-
-
(Facultatif) Créez un mappage utilisateur.
Hologres vous permet d'exécuter la commande
CREATE USER MAPPINGpour mapper un autre utilisateur afin d'accéder à DLF 1.0 et OSS. Par exemple, le propriétaire d'un serveur externe peut exécuterCREATE USER MAPPINGpour spécifier qu'un utilisateur RAM avec l'UID123xxxaccède aux données externes dans OSS.Assurez-vous que le compte dispose des autorisations requises pour interroger les données externes correspondantes. Pour plus d'informations sur les principes sous-jacents, consultez la documentation postgres create user mapping.
CREATE USER MAPPING FOR ACCOUNT_UID SERVER SERVER_NAME OPTIONS ( dlf_access_id 'YOUR_ACCESS_KEY', dlf_access_key 'YOUR_ACCESS_SECRET', oss_access_id 'YOUR_ACCESS_KEY', oss_access_key 'YOUR_ACCESS_SECRET' );Exemples :
-- Create a user mapping for the current user. CREATE USER MAPPING FOR current_user SERVER SERVER_NAME OPTIONS ( dlf_access_id 'YOUR_ACCESS_KEY', dlf_access_key 'YOUR_ACCESS_SECRET', oss_access_id 'YOUR_ACCESS_KEY', oss_access_key 'YOUR_ACCESS_SECRET' ); -- Create a user mapping for the RAM user 123xxx. CREATE USER MAPPING FOR "p4_123xxx" SERVER SERVER_NAME OPTIONS ( dlf_access_id 'YOUR_ACCESS_KEY', dlf_access_key 'YOUR_ACCESS_SECRET', oss_access_id 'YOUR_ACCESS_KEY', oss_access_key 'YOUR_ACCESS_SECRET' ); -- Drop the user mappings. DROP USER MAPPING FOR current_user SERVER SERVER_NAME; DROP USER MAPPING FOR "p4_123xxx" SERVER SERVER_NAME;
Lecture des données depuis un data lake OSS
Prenons l'exemple d'une source de données DLF 1.0. Vous devez préparer une table de métadonnées dans DLF 1.0 et vous assurer que les données ont été renseignées dans cette table . Les étapes suivantes décrivent comment accéder aux données OSS via DLF 1.0 en utilisant une table externe dans Hologres :
-
Créez une table externe dans votre instance Hologres.
Une fois le serveur créé, vous pouvez utiliser l'instruction CREATE FOREIGN TABLE ou l'instruction IMPORT FOREIGN SCHEMA pour créer une ou plusieurs tables externes dans Hologres. Cela vous permet de lire les données OSS gérées par DLF 1.0.
RemarqueSi une table externe OSS porte le même nom qu'une table interne Hologres, IMPORT FOREIGN SCHEMA ignore la création de cette table externe. Dans ce cas, utilisez CREATE FOREIGN TABLE et spécifiez un nom de table unique.
Hologres peut lire des tables partitionnées depuis OSS. Les colonnes de types TEXT, VARCHAR et INT sont prises en charge comme clés de partition. La méthode CREATE FOREIGN TABLE mappe uniquement les champs sans stocker les données, vous pouvez donc créer des champs de partition comme des champs ordinaires. La méthode IMPORT FOREIGN SCHEMA gère automatiquement le mappage des champs de table, vous n'avez donc pas besoin de gérer manuellement les champs de la table.
-
Syntaxe-- Méthode 1
CREATE FOREIGN TABLE [ IF NOT EXISTS ] oss_table_name ( [
{ column_name data_type }
[, ... ]
] )
SERVER SERVER_NAME
OPTIONS
(
schema_name 'DLF_DATABASE_NAME',
table_name 'DLF_TABLE_NAME'
);
-- Méthode 2
IMPORT FOREIGN SCHEMA schema_name
[ { limit to | except } ( table_name [, ...] ) ]
from server SERVER_NAME
into local_schema
[ options ( option 'value' [, ... ] ) ]
-
Paramètres
Parameter
Description
schema_name
Le nom de la base de données de métadonnées créée dans DLF 1.0.
table_name
Le nom de la table de métadonnées créée dans DLF 1.0.
SERVER_NAME
Le nom du serveur créé dans Hologres.
local_schema
Le nom du schéma dans Hologres.
options
Options pour l'instruction IMPORT FOREIGN SCHEMA. Pour plus d'informations, consultez la section IMPORT FOREIGN SCHEMA.
-
Exemples
-
Créez une table unique.
Créez une table externe pour mapper les données de la table de métadonnées dlf_oss_test dans la base de données de métadonnées DLF 1.0 dlfpro. La table se trouve dans le schéma public de Hologres. Si la table existe déjà, elle est mise à jour.
-- Method 1 CREATE FOREIGN TABLE dlf_oss_test_ext ( id text, pt text ) SERVER SERVER_NAME OPTIONS ( schema_name 'dlfpro', table_name 'dlf_oss_test' ); -- Method 2 IMPORT FOREIGN SCHEMA dlfpro LIMIT TO ( dlf_oss_test ) FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update'); -
Créez des tables en masse.
Mappez toutes les tables de la base de données de métadonnées DLF 1.0 dlfpro vers le schéma public dans Hologres. Cela permet de créer des tables externes dans Hologres en masse avec les mêmes noms.
-
Importez une base de données entière.IMPORT FOREIGN SCHEMA dlfpro
FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update');
-
Importez plusieurs tables.IMPORT FOREIGN SCHEMA dlfpro
(
table1,
table2,
tablen
)
FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update');
-
-
-
-
Interrogez les données.
Une fois la table externe créée, vous pouvez l'interroger directement pour lire les données depuis OSS.
-
Table non partitionnée
SELECT * FROM dlf_oss_test; -
Table partitionnée
SELECT * FROM partition_table WHERE dt = '2013';
-
Étapes suivantes
Pour améliorer les performances, importez les données OSS dans une table interne Hologres. Consultez la section Import data from a data lake by using SQL.
Pour écrire les données d'une table interne Hologres vers un data lake OSS afin de les interroger avec un moteur externe, consultez la section Export data to a data lake.
FAQ
Pourquoi l'erreur ERROR: babysitter not ready,req:name:"HiveAccess" s'affiche-t-elle lors de la création d'une table externe DLF 1.0 ?
-
Cause
La configuration backend n'a pas été ajoutée.
-
Solution
Sur la page Instances de la console Hologres, cliquez sur Lake Acceleration pour activer la configuration backend.