Un projet externe Paimon_DLF mappe un catalogue Data Lake Formation (DLF) à MaxCompute pour un accès en temps réel aux métadonnées et aux données. Il délègue la gestion des autorisations à DLF et prend en charge les opérations de lecture/écriture sur les données Object Storage Service (OSS) gérées par DLF, permettant ainsi un mappage de lac de données au niveau du catalogue pour une collaboration inter-moteurs basée sur Paimon. Cette fonctionnalité est actuellement en aperçu sur invitation.
Périmètre d'application
Format de table : seules les tables Paimon stockées dans OSS et entièrement gérées par DLF sont prises en charge.
Limitations en écriture : les tables à buckets dynamiques et les tables cross-partition ne prennent pas en charge les commandes
INSERT INTOniINSERT OVERWRITE.-
Projets externes :
-
Prise en charge de l'évolution du schéma
Type d'opération
Pris en charge
Ajouter une colonne
Supprimer une colonne
Réorganiser les colonnes
Modifier le type de données d'une colonne
Renommer une colonne
Modifier le commentaire d'une colonne
Modifier la nullabilité d'une colonne
-
Prise en charge des opérations de partition
Opération/Prise en charge
Pris en charge
Ajouter une partition
Modifier l'heure de mise à jour de la partition
Modifier la valeur de la partition
Fusionner les partitions
Lister toutes les partitions
Afficher les informations de partition
Supprimer une partition
Effacer les données de partition
-
Les opérations sur les ressources et les fonctions ne sont pas prises en charge.
Transmission des propriétés de table Paimon
Apache Paimon fournit des options de configuration de base. Lors de la création d'une table Paimon dans un projet externe, spécifiez ces options dans la clause TBLPROPERTIES de votre instruction CREATE TABLE.
Configuration : ajoutez les paramètres préfixés par mcfed. à la liste TBLPROPERTIES. Les noms de paramètres situés après le préfixe doivent correspondre aux noms de paramètres natifs de Paimon.
Exemple
Créer une table externe Paimon avec des buckets, une clé primaire et des partitions
-
Créer la table et configurer ses paramètres externes
-- Switch to your external project. You can skip this step if you are already in it. use <your external project>; -- Enable schema syntax at the session level. SET odps.namespace.schema=true; -- Select the schema to use. use schema <your schema>; CREATE TABLE oss_extable_bucket_pk_pt_bucket ( id BIGINT, name STRING, dt STRING )tblproperties ( 'mcfed.bucket'='3', -- Number of buckets 'mcfed.bucket-key'='id', -- Bucket key. Optional if a primary key is specified. "mcfed.primary-key"="dt,id", -- Primary key "mcfed.partition"="dt" -- Partition field ); -
Insérer des données dans la table externe
use <your external project>; SET odps.namespace.schema=true; use schema <your schema>; INSERT INTO oss_extable_bucket_pk_pt_bucket PARTITION (dt='2025-06-18') VALUES (1, 'Alice'),(2, 'Bob'); INSERT INTO oss_extable_bucket_pk_pt_bucket PARTITION (dt='2025-06-19') VALUES (3, 'Charlie'),(4, 'David'),(5, 'Eva'); -
Interroger la table externe
use <your external project>; SET odps.namespace.schema=true; use schema <your schema>; SELECT * FROM oss_extable_bucket_pk_pt_bucket; -- Result: +------------+---------+------------+ | id | name | dt | +------------+---------+------------+ | 1 | Alice | 2025-06-18 | | 2 | Bob | 2025-06-18 | | 4 | David | 2025-06-19 | | 3 | Charlie | 2025-06-19 | | 5 | Eva | 2025-06-19 | +------------+---------+------------+ -
Connectez-vous à la console Data Lake Formation (DLF), puis sélectionnez une région dans le coin supérieur gauche.
Consultez les détails de la table dans le catalogue.
FAQ
Problème 1 : Erreur lors de la création d'un projet externe
Problème : lorsque vous tentez de créer un projet externe, le message d'erreur suivant s'affiche : « You are not authorized to perform this action. »
Dans les détails de l'erreur, le code d'erreur est NoMCPermission.
Solution :
Si vous utilisez un utilisateur RAM, assurez-vous que la stratégie
AliyunMaxComputeFullAccessest attachée à cet utilisateur. Pour plus d'informations, consultez l'étape 1.Cette opération nécessite la sélection d'un catalogue dans Data Lake Formation (DLF). Assurez-vous de disposer des autorisations requises pour les opérations DLF. Pour plus d'informations, consultez l'étape 1.
Problème 2 : Erreur lors de l'exécution de SHOW TABLES dans le schéma par défaut
Problème : lorsque vous exécutez la commande SHOW TABLES dans le schéma par défaut d'un projet externe, le message d'erreur suivant s'affiche : « Forbidden:User acs: ram: :<uid>:user/** doesn't have privilege LIST on DATABASE default ».
Solution :
Connectez-vous à la console Data Lake Formation (DLF), puis sélectionnez une région dans le coin supérieur gauche.
Dans le volet de navigation de gauche, choisissez System & Security
Dans l'onglet , actualisez la page pour vérifier si l'utilisateur RAM actuel existe.
Si l'utilisateur existe, accédez à l'onglet pour accorder des autorisations à l'utilisateur RAM.
Problème 3 : Erreur « invalid database operations on two-tier »
Problème : lorsque vous exécutez la commande SHOW SCHEMAS dans un projet externe, le message d'erreur suivant s'affiche : « invalid database operations on two-tier ».
Solution :
-
Assurez-vous d'abord que vous utilisez un projet externe.
Si vous utilisez un nœud SQL DataWorks, cliquez sur Debug Configuration dans le volet de droite et vérifiez que la ressource de calcul liée est un projet externe.
Si vous utilisez l'analyse SQL DataWorks, cliquez sur Data Source dans le coin supérieur droit et vérifiez que la source de données liée est un projet externe.
Si vous utilisez l'analyse SQL MaxCompute, cliquez sur Run Configuration dans le volet de droite et vérifiez que le projet sélectionné dans la section des ressources de calcul est un projet externe.
Si vous utilisez odpscmd, vérifiez la valeur du paramètre
project_namedans le fichier odps_config.ini pour vous assurer qu'elle est définie sur le nom du projet externe.
-
Après avoir confirmé que vous utilisez un projet externe, sélectionnez et exécutez les instructions SQL suivantes ensemble.
-- Enable schema syntax at the session level. SET odps.namespace.schema=true; SHOW schemas;
Problème 4 : SHOW SCHEMAS renvoie uniquement le schéma par défaut
Problème : lorsque vous exécutez la commande SHOW SCHEMAS dans un projet externe, la commande renvoie uniquement « default ».
Solution :
-
Assurez-vous d'abord que vous utilisez un projet externe.
Si vous utilisez un nœud SQL DataWorks, cliquez sur Debug Configuration dans le volet de droite et vérifiez que la ressource de calcul liée est un projet externe.
Si vous utilisez l'analyse SQL DataWorks, cliquez sur Data Source dans le coin supérieur droit et vérifiez que la source de données liée est un projet externe.
Si vous utilisez l'analyse SQL MaxCompute, cliquez sur Run Configuration dans le volet de droite et vérifiez que le projet sélectionné dans la section des ressources de calcul est un projet externe.
Si vous utilisez odpscmd, vérifiez la valeur du paramètre
project_namedans le fichier odps_config.ini pour vous assurer qu'elle est définie sur le nom du projet externe.
Après avoir confirmé que vous utilisez un projet externe, connectez-vous à la console Data Lake Formation (DLF) et vérifiez si d'autres bases de données existent dans le catalogue lié au projet externe.
Si vous avez effectué les vérifications des étapes 1 et 2, mais que la commande SHOW SCHEMAS ne renvoie toujours pas les bases de données attendues, soumettez un ticket pour signaler le problème.
Problème 5 : Erreur « Dynamic bucket »
Problème : lorsque vous exécutez la commande SHOW TABLES dans un projet externe, le message d'erreur suivant s'affiche :
ODPS-0110005:
com.aliyun.odps.meta.exception.MetaException:
com.aliyun.odps.common.table.na.NativeException:
common/table/jni/utils/jni_helper.cpp(79): UnretryableException: Common table connector exception
- ExceptionType: java.lang.IllegalArgumentException
- Message: You should use dynamic bucket (bucket = -1) mode in cross partition update case (Primary key constraint [sending_time, symbol, sequence_number] not include all partition fields [pt]).[pt])
Solution :
Cette erreur se produit car MaxCompute ne prend pas en charge les tables de clé primaire cross-partition avec des buckets fixes.
Solution de contournement temporaire : supprimez les tables PK cross-partition non prises en charge dans la console Data Lake Formation (DLF).
Problème 6 : Erreur « Can't set default schema... »
Problème : lorsque vous exécutez SHOW TABLES ou SHOW SCHEMAS, le message d'erreur suivant s'affiche : "FAILED: Can't set default schema if odps.namespace.schema is false."
Solution :
Assurez-vous d'abord d'avoir ajouté l'indicateur de session
SET odps.namespace.schema=true;avant vos instructions SQL pour activer la syntaxe de schéma.-
Si l'erreur persiste après avoir activé l'indicateur, vérifiez l'ordre de vos instructions. Pour lire une table depuis un autre projet externe, utilisez la séquence de commandes suivante :
USE external_project; SET odps.namespace.schema=true; USE schema schema_name; SHOW tables;
Problème 7 : Erreur « Failed to connect to...dlf.aliyuncs.com »
Problème : lorsque vous essayez de lire des données à partir d'une table dans un projet externe Paimon_DLF, un message d'erreur similaire au suivant s'affiche : « Caused by: java.net.ConnectException: Failed to connect to cn-***-intranet.dlf.aliyuncs.com/xx.xx.xx.xx:80 »
Cette erreur indique que vous devez ajouter l'adresse cn-***-intranet.dlf.aliyuncs.com à la liste d'autorisation du projet interne où la tâche s'exécute.
Solution :
Rejoignez le groupe DingTalk de la communauté des développeurs MaxCompute en utilisant le lien d'invitation ou en recherchant l'ID de groupe
11782920dans DingTalk. Contactez l'équipe d'assistance technique MaxCompute et demandez-leur d'ajouter l'adresse issue du message d'erreur à la liste d'autorisation.-
Une fois l'adresse ajoutée à la liste d'autorisation, incluez les paramètres suivants avant vos opérations de lecture.
set odps.security.outbound.intranetlist=cn-***-intranet.dlf.aliyuncs.com:80; set odps.internet.access.list=cn-***-intranet.dlf.aliyuncs.com:80;
Mappage des types de données
Pour plus de détails sur les types de données MaxCompute, consultez les rubriques Types de données (V1.0) et Types de données (V2.0).
|
Type de données Paimon |
Type de données MaxCompute 2.0 |
Prise en charge lecture/écriture |
Description |
|
TINYINT |
TINYINT |
|
Entier signé 8 bits. |
|
SMALLINT |
SMALLINT |
|
Entier signé 16 bits. |
|
INT |
INT |
|
Entier signé 32 bits. |
|
BIGINT |
BIGINT |
|
Entier signé 64 bits. |
|
BINARY(MAX_LENGTH) |
BINARY |
|
Type de données binaire. La longueur maximale actuelle est de 8 Mo. |
|
FLOAT |
FLOAT |
|
Nombre à virgule flottante binaire 32 bits. |
|
DOUBLE |
DOUBLE |
|
Nombre à virgule flottante binaire 64 bits. |
|
DECIMAL(precision,scale) |
DECIMAL(precision,scale) |
|
Type numérique décimal exact. La valeur par défaut est
|
|
VARCHAR(n) |
VARCHAR(n) |
|
Type de caractère de longueur variable. n spécifie la longueur et varie de 1 à 65 535. |
|
CHAR(n) |
CHAR(n) |
|
Type de caractère de longueur fixe. n spécifie la longueur et varie de 1 à 255. |
|
VARCHAR(MAX_LENGTH) |
STRING |
|
Type de chaîne. La longueur maximale actuelle est de 8 Mo. |
|
DATE |
DATE |
|
Type de date. Le format est |
|
TIME, TIME(p) |
Non pris en charge |
|
Le type de données TIME de Paimon représente une heure sans fuseau horaire, composée d'heures, de minutes et de secondes, avec une précision à la nanoseconde. TIME(p) spécifie la précision des fractions de seconde de 0 à 9. La valeur par défaut est 0. Aucun type correspondant n'existe dans MaxCompute. |
|
TIMESTAMP, TIMESTAMP(p) |
TIMESTAMP_NTZ |
|
Un type d'horodatage sans fuseau horaire, précis à la nanoseconde. Pour lire ce type de données, vous devez désactiver le pont JNI natif en exécutant la commande suivante : |
|
TIMESTAMP WITH LOCAL TIME_ZONE(9) |
TIMESTAMP |
|
|
|
TIMESTAMP WITH LOCAL TIME_ZONE(9) |
DATETIME |
|
Un type d'horodatage précis à la nanoseconde. Le format est |
|
BOOLEAN |
BOOLEAN |
|
Un type BOOLEAN. |
|
ARRAY |
ARRAY |
|
Un type complexe. |
|
MAP |
MAP |
|
Un type complexe. |
|
ROW |
STRUCT |
|
Un type complexe. |
|
MULTISET<t> |
Non pris en charge |
|
Aucun type correspondant n'existe dans MaxCompute. |
|
VARBINARY, VARBINARY(n), BYTES |
BINARY |
|
Un type de données de chaînes binaires de longueur variable. |
Procédure
Étape 1 : Accorder des autorisations
Modèle d'autorisations
-
Plan de contrôle : ces autorisations sont vérifiées lorsque vous effectuez des opérations dans la console MaxCompute, principalement lors de la création d'un projet externe et de sa liaison à un catalogue DLF.
Ces autorisations sont gérées par RAM. Votre compte Alibaba Cloud doit se connecter à la console RAM pour configurer les autorisations requises. Pour plus d'informations, consultez la rubrique Gérer les autorisations d'un utilisateur RAM.
-
Plan de données : ces autorisations sont vérifiées lorsque vous lisez ou écrivez dans des tables Paimon après vous être connecté au projet externe. Cela se produit généralement lorsque vous créez, maintenez ou utilisez des schémas, des tables et d'autres ressources au sein du catalogue DLF lié en exécutant des instructions SQL dans MaxCompute.
Ces autorisations sont gérées par la console DLF. Votre compte Alibaba Cloud doit se connecter à la console DLF pour configurer les autorisations requises. Pour plus d'informations, consultez la rubrique Accorder des autorisations à un utilisateur RAM.
Accorder des autorisations DLF à MaxCompute
MaxCompute accède aux données Paimon_DLF via une source de données externe et un projet externe. Avant de poursuivre, accordez les autorisations de données DLF nécessaires au compte d'accès MaxCompute.
L'option « Use task executor identity » transmet l'identité de l'exécuteur de tâche à DLF. MaxCompute et DLF appliquent ensuite les autorisations en fonction de cette identité. Commencez par créer un rôle lié au service pour MaxCompute et accordez-lui les autorisations nécessaires :
Connectez-vous à la console RAM.
Dans le volet de navigation de gauche, sélectionnez .
Sur la page Roles, cliquez sur Create Role.
Dans le coin supérieur droit de la page Create Role, cliquez sur Create Service Linked Role.
-
Sur la page Create Service Linked Role, sélectionnez
AliyunServiceRoleForMaxComputeLakehousepour Select Service et cliquez sur Create Service Linked Role.Si vous êtes invité indiquant que le rôle existe déjà, cela signifie qu'il a déjà été autorisé et vous pouvez ignorer l'invite.
Accorder des autorisations à un utilisateur RAM
Si vous êtes un utilisateur RAM, attachez les stratégies d'autorisation suivantes. Pour savoir comment ajouter des autorisations, consultez la rubrique Gérer les autorisations d'un utilisateur RAM.
AliyunRAMFullAccess : si un utilisateur RAM ne dispose pas de cette autorisation, un compte Alibaba Cloud doit la lui accorder.
AliyunMaxComputeFullAccess : requis pour créer des sources de données externes et des projets externes.
AliyunDLFReadOnlyAccess : requis pour créer des projets externes. Cette stratégie d'autorisation est nécessaire car la création d'un projet externe Paimon_DLF requiert l'autorisation List pour le catalogue DLF.
Étape 2 : Créer une source de données externe Paimon_DLF
Connectez-vous à la console MaxCompute et sélectionnez une région dans le coin supérieur gauche.
Dans le volet de navigation de gauche, choisissez .
Sur la page External Data Source, cliquez sur Create External Data Source.
-
Dans la boîte de dialogue Create External Data Source, configurez les paramètres. Les tableaux suivants décrivent ces paramètres.
Paramètre
Obligatoire
Description
External Data Source Type
Oui
Sélectionnez Paimon_DLF.
External Data Source Name
Oui
Saisissez un nom personnalisé. Le nom doit répondre aux exigences suivantes :
Il doit commencer par une lettre et ne peut contenir que des lettres minuscules, des chiffres et des traits de soulignement (_).
Sa longueur ne peut pas dépasser 128 caractères.
Par exemple, vous pouvez saisir
paimon_dlf.Description
Non
Saisissez une description si nécessaire.
Region
Oui
La région actuelle est sélectionnée par défaut.
Authentication and Authorization
Oui
La valeur par défaut est un rôle RAM Alibaba Cloud.
Service-linked Role
Oui
Le rôle est généré par défaut.
Endpoint
Oui
L'endpoint est généré automatiquement. Pour la région Chine (Hangzhou), l'endpoint est
cn-hangzhou-intranet.dlf.aliyuncs.com.Foreign Server Supplemental Properties
Non
Ces propriétés définissent la manière dont les tâches utilisant cette source de données accèdent au système source.
RemarqueLes paramètres pris en charge seront étendus dans les futures mises à jour de la documentation à mesure que le produit évoluera.
Cliquez sur OK pour créer la source de données externe.
Sur la page External Data Source, localisez la source de données et cliquez sur Details dans la colonne Actions pour afficher ses détails.
Étape 3 : Créer un projet externe
Connectez-vous à la console MaxCompute et sélectionnez une région dans le coin supérieur gauche.
Dans le volet de navigation de gauche, choisissez .
Dans l'onglet External Project, cliquez sur Create Project.
-
Dans la boîte de dialogue Create Project, configurez les paramètres et cliquez sur OK.
Paramètre
Obligatoire
Description
Project Type
Oui
La valeur par défaut est External Project.
Region
Oui
La région actuelle est sélectionnée par défaut et ne peut pas être modifiée.
Project Name (Globally Unique)
Oui
Le nom doit comporter entre 3 et 28 caractères, commencer par une lettre et ne contenir que des lettres, des chiffres et des traits de soulignement (_).
MaxCompute Foreign Server Type
Non
La valeur par défaut est Paimon_DLF.
MaxCompute Foreign Server
Non
Use Existing : affiche une liste des sources de données externes existantes.
Create Foreign Server : vous permet de créer et d'utiliser une nouvelle source de données externe.
MaxCompute Foreign Server Name
Oui
Si vous avez choisi d'utiliser une source de données existante, sélectionnez son nom dans la liste déroulante.
Si vous avez choisi de créer une nouvelle source de données, son nom est automatiquement utilisé.
Data Catalog
Oui
Le catalogue de données DLF.
Billing Method
Oui
Sélectionnez Subscription ou Pay-as-you-go.
Default Quota
Oui
Sélectionnez un quota existant.
Description
Non
Saisissez une description personnalisée du projet.
Étape 4 : Utiliser SQL pour accéder à la source de données
La suppression d'un projet externe ne supprime pas les données sous-jacentes, car le projet n'est qu'un mappage vers la source de données.
Toutefois, contrairement aux tables externes standard, l'exécution d'une commande DROP TABLE ou DROP SCHEMA dans un projet externe envoie la requête au service pair. Cela supprime définitivement la table ou la base de données correspondante. Utilisez les opérations DROP avec prudence.
-
Choisir un outil de connexion pour se connecter au projet externe.
L'exemple suivant utilise un nœud SQL pour le développement de données dans un espace de travail DataWorks (nouvelle version).
Connectez-vous à la console DataWorks et sélectionnez une région dans le coin supérieur gauche.
Dans le volet de navigation de gauche, choisissez Workspace.
Sur la page Workspaces, cliquez sur Create Workspace ou sur le nom d'un espace de travail existant.
Sur la page Workspace Details, cliquez sur Computing Resource dans le volet de navigation de gauche.
Sur la page Computing Resource, cliquez sur Associate Computing Resources, puis sélectionnez MaxCompute.
-
Configurez les Basic Information pour Associate MaxCompute Computing Resource.
Pour le projet MaxCompute, sélectionnez le projet externe.
-
Listez les schémas du projet externe.
-- Enable schema syntax at the session level. SET odps.namespace.schema=true; SHOW schemas; -- Sample result. ID = 20250919****am4qb default system OK -
Listez les tables d'un schéma au sein du projet externe.
Si vous devez accéder aux tables d'un projet externe de production dans l'environnement actuel, ajoutez
use external_project_pro;avant toutes les instructions SQL.-- schema_name is the schema name returned by SHOW SCHEMAS in the external project. SET odps.namespace.schema=true; USE schema <schema_name>; SHOW tables; -- Result ID = 20250919****am4qb acs:ram::<uid>:root emp OK -
Créez un nouveau schéma dans le projet externe.
-- In this example, schema_name is schema_demo_test. SET odps.namespace.schema=true; CREATE schema <schema_name>; -
Créez une table et insérez des données dans le schéma.
Si vous êtes connecté en tant qu'utilisateur RAM, cette opération nécessite des autorisations sur le catalogue DLF. Pour savoir comment accorder des autorisations, consultez la rubrique Gestion des autorisations de données.
-
Format de la commande :
-- Create a table. CREATE TABLE [IF NOT EXISTS] <table_name> ( <col_name> <data_type>, ... ) [COMMENT <table_comment>] [PARTITIONED BY (<col_name> <data_type>, ...)] ; -- Insert data. INSERT {INTO|OVERWRITE} TABLE <table_name> [PARTITION (<pt_spec>)] [(<col_name> [,<col_name> ...)]] <select_statement> FROM <from_statement> -
Exemple :
RemarquePour les types TIMESTAMP de faible précision provenant de la table source Paimon, les données sont tronquées lors des opérations d'écriture comme suit : la précision 0–3 est tronquée à 3 décimales, 4–6 à 6 décimales et 7–9 à 9 décimales.
SET odps.namespace.schema=true; USE schema <schema_name>; CREATE TABLE schema_table(id int,name string); INSERT INTO schema_table VALUES (101,'Zhang San'),(102,'Li Si'); -- Query the schema_table table. SET odps.namespace.schema=true; USE schema <schema_name>; SELECT * FROM schema_table; -- Result +------------+------------+ | id | name | +------------+------------+ | 101 | Zhang San | | 102 | Li Si | +------------+------------+
-
-
Basculez vers le schéma
defaultexistant.use schema default; SHOW tables; -- Sample result ID = 20250919*******yg5 acs:ram::<uid>:root emp acs:ram::<uid>:root emp_detail acs:ram::<uid>:root test_table OK -- Read data from the table. SET odps.namespace.schema=true; USE schema default; SELECT * FROM test_table; -- Result +------------+------------+ | id | name | +------------+------------+ | 101 | Zhang San | | 102 | Li Si | +------------+------------+ -- Write data to the table and query to verify the write operation. SET odps.namespace.schema=true; USE schema default; INSERT INTO test_table VALUES (103,'Wang Wu'); SET odps.namespace.schema=true; USE schema default; SELECT * FROM test_table; -- Result +------------+------------+ | id | name | +------------+------------+ | 101 | Zhang San | | 102 | Li Si | | 103 | Wang Wu | +------------+------------+