MaxCompute vous permet de créer une table externe Paimon pour mapper un répertoire de table Paimon stocké dans Object Storage Service (OSS) et accéder aux données qu'il contient. Cette rubrique explique comment créer une table externe Paimon et y accéder avec MaxCompute.
Présentation
Apache Paimon est un format de stockage lakehouse conçu pour le traitement par lots et en flux continu, offrant des écritures à haut débit et des requêtes à faible latence. Il s'intègre parfaitement aux moteurs de calcul courants tels que Spark, Hive et Trino, ainsi qu'à Realtime Compute for Apache Flink et E-MapReduce. Utilisez Apache Paimon pour construire rapidement un data lake sur OSS et le connecter à MaxCompute pour l'analytique des data lakes. La fonctionnalité de filtrage des métadonnées améliore encore les performances des requêtes en ignorant les fichiers inutiles des répertoires OSS lors des tâches de lecture.
Limites
-
Limites liées au schéma
Les tables externes Paimon ne mettent pas automatiquement à jour leur schéma pour refléter les modifications apportées aux schémas des fichiers Paimon sous-jacents.
-
Limites liées aux propriétés de la table
Vous ne pouvez pas définir de propriétés de cluster sur une table externe Paimon.
Vous ne pouvez pas définir de clé primaire.
Les tables externes Paimon ne prennent pas en charge la transmission directe des propriétés de table Paimon.
-
Opérations d'écriture, de mise à jour et de requête des données
Utilisez les instructions
INSERT INTOouINSERT OVERWRITEpour écrire des données dans une table externe Paimon.L'écriture de données dans des tables à buckets dynamiques et des tables inter-partitions n'est pas prise en charge.
Les opérations
UPDATEetDELETEne sont pas prises en charge sur les tables externes Paimon.Les requêtes de voyage dans le temps permettant d'accéder aux versions historiques des données ne sont pas prises en charge pour les tables externes Paimon.
N'écrivez pas directement des données dans les tables externes Paimon. Utilisez plutôt des méthodes telles que UNLOAD pour exporter les données vers OSS.
MaxCompute et OSS doivent se trouver dans la même région.
Pour plus d'informations, consultez la section Types de données pris en charge.
Créer une table externe Paimon
Syntaxe
Pour obtenir des détails sur la syntaxe de création de tables externes dans différents formats, consultez la section Tables externes OSS.
CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>';
Paramètres courants
Pour plus d'informations sur les paramètres courants, consultez la section Paramètres de syntaxe de base.
Écrire des données
Pour obtenir des détails sur la syntaxe d'écriture dans MaxCompute, consultez la section Syntaxe d'écriture.
Interroger et analyser les données
La logique de fragmentation (split) des données pour les tables Paimon diffère de celle des tables natives MaxCompute. Le format Paimon dispose de ses propres mécanismes internes d'organisation et de fragmentation des fichiers, qui ne s'alignent pas entièrement sur les paramètres MaxCompute.
Pour la syntaxe SELECT, consultez la section Syntaxe de requête.
Pour optimiser les plans de requête, consultez la section Optimisation des requêtes.
Pour plus d'informations sur l'ignorance des lignes erronées, consultez la section BadRowSkipping.
Exemple
Étape 1 : Prérequis
Vous avez créé un projet MaxCompute.
-
Vous avez préparé un bucket OSS et un répertoire. Pour plus d'informations, consultez les sections Créer un bucket et Gérer les répertoires.
Assurez-vous que votre bucket se trouve dans la même région que votre projet MaxCompute.
-
Accordez les autorisations.
Vous disposez des autorisations nécessaires pour accéder à OSS. Vous pouvez accéder à une table externe OSS en utilisant un compte Alibaba Cloud, un utilisateur RAM ou un rôle RAM. Pour plus d'informations sur l'octroi des autorisations, consultez la section Autorisation STS pour OSS.
Vous disposez de l'autorisation CreateTable dans le projet MaxCompute. Pour plus d'informations sur les autorisations liées aux tables, consultez la section Autorisations MaxCompute.
Étape 2 : Préparer les données dans Flink
Créez un catalogue Paimon et une table Paimon, puis insérez des données dans la table.
Si vous disposez déjà de données de table Paimon dans OSS, vous pouvez ignorer cette étape.
-
Créer un catalogue de système de fichiers Paimon
Connectez-vous à la console Realtime Compute for Apache Flink et sélectionnez une région dans le coin supérieur gauche.
Cliquez sur le nom de l'espace de travail cible, puis dans le volet de navigation de gauche, sélectionnez Data Management.
-
Sur la page catalog list , cliquez sur Create Catalog . Dans la boîte de dialogue Create Catalog , sélectionnez Apache Paimon, cliquez sur Next , puis configurez les paramètres suivants :
Parameter
Required
Description
metastore
Yes
Type de metastore. Dans cet exemple, sélectionnez
filesystem.catalog name
Yes
Nom personnalisé du catalogue, par exemple
paimon-catalog.warehouse
Yes
Répertoire warehouse dans OSS. Dans cet exemple, le répertoire est
oss://paimon-fs/paimon-test/.fs.oss.endpoint
Yes
Endpoint du service OSS. Par exemple, l'endpoint pour la région Chine (Hangzhou) est
oss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyId
Yes
AccessKey ID utilisé pour accéder à OSS.
fs.oss.accessKeySecret
Yes
AccessKey Secret utilisé pour accéder à OSS.
-
Créer une table Paimon
Connectez-vous à la console Realtime Compute for Apache Flink et sélectionnez une région dans le coin supérieur gauche.
Cliquez sur le nom de l'espace de travail cible, puis dans le volet de navigation de gauche, sélectionnez .
-
Dans l'onglet Query Script, cliquez sur
pour créer un nouveau script de requête.Saisissez et exécutez les commandes suivantes :
CREATE TABLE `paimon_catalog`.`default`.test_tbl ( id BIGINT, data STRING, dt STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt); INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
-
Pour les jobs SQL qui se terminent automatiquement, tels que ceux exécutant une instruction
INSERT INTO ... VALUES ..., effectuez les opérations suivantes :Cliquez sur le nom de l'espace de travail cible. Dans le volet de navigation de gauche, choisissez .
Sur la page Deployments, cliquez sur le job cible pour ouvrir la page deployment details.
-
Dans la section Parameters, cliquez sur Edit. Ensuite, dans la section Other Configuration, définissez
execution.checkpointing.checkpoints-after-tasks-finish.enabled: trueet enregistrez vos modifications.Pour plus d'informations sur la configuration des paramètres d'exécution d'un job, consultez la section Configurer les informations de déploiement du job.
Étape 3 : Créer une table externe Paimon
Exécutez l'instruction SQL suivante dans MaxCompute pour créer une table externe Paimon :
CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-<your region>-internal.aliyuncs.com/<table_path>'
;
Dans l'instruction ci-dessus, table_path correspond au chemin d'accès à la table Paimon que vous avez créée dans Flink, par exemple paimon-fs/paimon-test/default.db/test_tbl. Pour trouver ce chemin, procédez comme suit :
Connectez-vous à la console Realtime Compute for Apache Flink et sélectionnez une région dans le coin supérieur gauche.
Cliquez sur le nom de l'espace de travail cible, puis dans le volet de navigation de gauche, sélectionnez Data Management.
Sur la page Catalogs, sous le catalogue cible, cliquez sur default. Sur la page default, recherchez la table cible et cliquez sur View dans la colonne Actions.
Dans l'onglet Table Schema, copiez la valeur du paramètre path depuis la section Properties. Pour table_path, saisissez le chemin sans le préfixe
oss://.
Étape 4 : Charger les données de partition
Si la table externe OSS que vous avez créée est une table partitionnée, vous devez charger ses partitions. Pour plus d'informations, consultez la section Tables externes OSS.
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;
Étape 5 : Interroger la table externe Paimon
Exécutez les commandes suivantes dans MaxCompute pour interroger la table externe Paimon oss_extable_paimon_pt.
SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';
Le résultat suivant est renvoyé :
+------------+------------+------------+
| id | data | dt |
+------------+------------+------------+
| 1 | CCC | 2024-07-18 |
| 2 | DDD | 2024-07-18 |
+------------+------------+------------+
Si le schéma des fichiers Paimon diffère du schéma de la table externe :
Nombre de colonnes différent : Si les fichiers Paimon contiennent moins de colonnes que la DDL de la table externe, MaxCompute lit les colonnes manquantes comme NULL. Si les fichiers contiennent plus de colonnes, MaxCompute les ignore.
Type de colonne différent : Vous ne pouvez pas lire les données d'une colonne Paimon STRING dans une colonne MaxCompute INT. La lecture des données d'une colonne INT dans une colonne STRING est prise en charge mais non recommandée.
Types de données pris en charge
Pour plus d'informations sur les types de données MaxCompute, consultez les sections Versions des types de données 1,0 et 2,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 chaîne. La longueur maximale actuelle est de 8 Mo. | |
DATE | DATE | Type date. Le format est | |
TIME, TIME(p) | Non pris en charge | Le type de données TIME 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. |
Dépannage
Erreur kSIGABRT lors de la lecture d'une table externe Paimon
-
Message d'erreur :
ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0 -
Cause :
Cette erreur se produit lorsque vous lisez une colonne TIMESTAMP_NTZ en mode JNI.
-
Solution :
Désactivez le pont JNI en exécutant la commande suivante avant votre requête :
SET odps.sql.common.table.jni.disable.native=true;
Articles connexes
Vous pouvez également utiliser un catalogue Flink personnalisé pour gérer les tables externes MaxCompute Paimon. Cela vous permet d'écrire des données via Flink et de les interroger dans MaxCompute. Pour plus d'informations, consultez la section Créer une table externe MaxCompute Paimon à l'aide de Flink.