Tous les produits
Search
Centre de documentation

MaxCompute:Table externe Paimon

Dernière mise à jour :Aug 21, 2026

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 INTO ou INSERT OVERWRITE pour é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 UPDATE et DELETE ne 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

  1. Vous avez créé un projet MaxCompute.

  2. 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.
  3. Accordez les autorisations.

    1. 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.

    2. 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.

Remarque

Si vous disposez déjà de données de table Paimon dans OSS, vous pouvez ignorer cette étape.

  1. Créer un catalogue de système de fichiers Paimon

    1. Connectez-vous à la console Realtime Compute for Apache Flink et sélectionnez une région dans le coin supérieur gauche.

    2. Cliquez sur le nom de l'espace de travail cible, puis dans le volet de navigation de gauche, sélectionnez Data Management.

    3. 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.

  2. Créer une table Paimon

    1. Connectez-vous à la console Realtime Compute for Apache Flink et sélectionnez une région dans le coin supérieur gauche.

    2. Cliquez sur le nom de l'espace de travail cible, puis dans le volet de navigation de gauche, sélectionnez Development > Data Query.

    3. Dans l'onglet Query Script, cliquez sur image 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');
  3. Pour les jobs SQL qui se terminent automatiquement, tels que ceux exécutant une instruction INSERT INTO ... VALUES ..., effectuez les opérations suivantes :

    1. Cliquez sur le nom de l'espace de travail cible. Dans le volet de navigation de gauche, choisissez O&M > Deployments.

    2. Sur la page Deployments, cliquez sur le job cible pour ouvrir la page deployment details.

    3. Dans la section Parameters, cliquez sur Edit. Ensuite, dans la section Other Configuration, définissez execution.checkpointing.checkpoints-after-tasks-finish.enabled: true et 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 :

  1. Connectez-vous à la console Realtime Compute for Apache Flink et sélectionnez une région dans le coin supérieur gauche.

  2. Cliquez sur le nom de l'espace de travail cible, puis dans le volet de navigation de gauche, sélectionnez Data Management.

  3. 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.

  4. 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 | 
+------------+------------+------------+
Remarque

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

Pris en charge

Entier signé 8 bits.

SMALLINT

SMALLINT

Pris en charge

Entier signé 16 bits.

INT

INT

Pris en charge

Entier signé 32 bits.

BIGINT

BIGINT

Pris en charge

Entier signé 64 bits.

BINARY(MAX_LENGTH)

BINARY

Pris en charge

Type de données binaire. La longueur maximale actuelle est de 8 Mo.

FLOAT

FLOAT

Pris en charge

Nombre à virgule flottante binaire 32 bits.

DOUBLE

DOUBLE

Pris en charge

Nombre à virgule flottante binaire 64 bits.

DECIMAL(precision,scale)

DECIMAL(precision,scale)

Pris en charge

Type numérique décimal exact. La valeur par défaut est decimal(38,18). Vous pouvez personnaliser les valeurs de précision et d'échelle.

  • precision : Nombre maximal de chiffres. Les valeurs valides vont de 1 à 38.

  • scale : Nombre de chiffres dans la partie fractionnaire. Les valeurs valides vont de 0 à 18.

VARCHAR(n)

VARCHAR(n)

Pris en charge

Type de caractère de longueur variable. n spécifie la longueur et varie de 1 à 65 535.

CHAR(n)

CHAR(n)

Pris en charge

Type de caractère de longueur fixe. n spécifie la longueur et varie de 1 à 255.

VARCHAR(MAX_LENGTH)

STRING

Pris en charge

Type chaîne. La longueur maximale actuelle est de 8 Mo.

DATE

DATE

Pris en charge

Type date. Le format est yyyy-mm-dd.

TIME, TIME(p)

Non pris en charge

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

Pris en charge

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 : SET odps.sql.common.table.jni.disable.native=true;

TIMESTAMP WITH LOCAL TIME_ZONE(9)

TIMESTAMP

Pris en charge

  • Un type d'horodatage précis à la nanoseconde. Le format est yyyy-mm-dd hh:mm:ss.xxxxxxxxx.

  • Pour les types TIMESTAMP de faible précision dans la table source Paimon, MaxCompute tronque les valeurs lors des écritures. Pour une précision de 0 à 3, les données sont tronquées à 3 chiffres. Pour une précision de 4 à 6, les données sont tronquées à 6 chiffres. Pour une précision de 7 à 9, les données sont tronquées à 9 chiffres.

TIMESTAMP WITH LOCAL TIME_ZONE(9)

DATETIME

Non pris en charge

Un type d'horodatage précis à la nanoseconde.

Le format est yyyy-mm-dd hh:mm:ss.xxxxxxxxx.

BOOLEAN

BOOLEAN

Pris en charge

Un type BOOLEAN.

ARRAY

ARRAY

Pris en charge

Un type complexe.

MAP

MAP

Pris en charge

Un type complexe.

ROW

STRUCT

Pris en charge

Un type complexe.

MULTISET<t>

Non pris en charge

Non pris en charge

Aucun type correspondant n'existe dans MaxCompute.

VARBINARY, VARBINARY(n), BYTES

BINARY

Pris en charge

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.