Les tables externes Delta Lake dans OSS vous permettent d'interroger les données au format Delta Lake directement sur place, sans les déplacer ni les convertir. Cette rubrique explique comment créer, configurer et interroger ces tables.
MaxCompute prend en charge les tables externes Delta Lake uniquement avec une version figée du kit de développement logiciel (SDK) Delta Lake et ne mettra pas à jour ce SDK ni ne développera davantage cette fonctionnalité. Pour les nouvelles charges de travail de data lake, utilisez plutôt des tables externes Paimon.
Limites
Avant de créer une table externe Delta Lake, examinez les contraintes suivantes :
|
Contrainte |
Détail |
Impact |
|
Lecture seule, analyse complète |
Seules les lectures complètes de toutes les données mappées à la table sont prises en charge. Le masquage automatique des colonnes système, les lectures incrémentielles, les lectures par snapshot et les opérations d'écriture ne sont pas pris en charge. |
Pour les opérations ACID, utilisez les tables Delta MaxCompute ou des tables externes Paimon. |
|
Aucune propriété |
Les tables externes OSS ne prennent pas en charge la propriété |
Omettez la clause |
|
Limite de 2 Go par fichier |
Un fichier unique ne peut pas dépasser 2 Go. |
Divisez les fichiers qui dépassent cette limite avant de créer la table. |
|
Exigence de même région |
MaxCompute et le compartiment OSS doivent se trouver dans la même région. |
L'accès interrégional n'est pas pris en charge et entraînera l'échec des requêtes. |
|
Version de SDK figée |
Le SDK Delta Lake intégré à MaxCompute est |
Utilisez des données Delta Lake écrites avec une version compatible du SDK. |
Types de données pris en charge
Tous les types de données MaxCompute suivants sont pris en charge. Pour plus de détails sur les types, consultez Types de données (version 1.0) et Types de données (version 2.0).
|
Type de données |
Pris en charge |
Type de données |
Pris en charge |
|
TINYINT |
Oui |
STRING |
Oui |
|
SMALLINT |
Oui |
DATE |
Oui |
|
INT |
Oui |
DATETIME |
Oui |
|
BIGINT |
Oui |
TIMESTAMP |
Oui |
|
BINARY |
Oui |
TIMESTAMP_NTZ |
Oui |
|
FLOAT |
Oui |
BOOLEAN |
Oui |
|
DOUBLE |
Oui |
ARRAY |
Oui |
|
DECIMAL(precision,scale) |
Oui |
MAP |
Oui |
|
VARCHAR(n) |
Oui |
STRUCT |
Oui |
|
CHAR(n) |
Oui |
JSON |
Oui |
Créer une table externe
Syntaxe
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'io.delta.hive.DeltaInputFormat'
OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
LOCATION 'oss_location';
DeltaInputFormat et DeltaOutputFormat sont les classes d'entrée/sortie compatibles Hive de Delta Lake. ParquetHiveSerDe gère la sérialisation Parquet sous-jacente, car Delta Lake stocke les données au format Parquet. Vous devez spécifier ces trois éléments pour enregistrer correctement la table.
Pour plus de détails sur les paramètres, consultez Paramètres de syntaxe de base.
Interroger les données
Pour la syntaxe SELECT, consultez Lire des données depuis OSS.
Pour l'optimisation des plans de requête, consultez Optimisation des requêtes.
Exemple : création et interrogation d'une table externe Delta Lake partitionnée
Cet exemple présente le flux de travail complet : chargement des données Delta Lake vers OSS, création d'une table externe partitionnée dans MaxCompute, importation des métadonnées de partition et exécution d'une requête.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un compartiment OSS situé dans la même région que votre projet MaxCompute. Consultez Créer un compartiment et Gérer les dossiers
Une autorisation d'accès OSS via un compte Alibaba Cloud, un utilisateur RAM (Resource Access Management) ou un rôle RAM. Consultez Autoriser l'accès en mode STS pour OSS
L'autorisation
CreateTabledans le projet MaxCompute. Consultez Autorisations MaxCompute
Étapes
-
Chargez les données de test. Connectez-vous à la console OSS et chargez un fichier de données de test au format Delta Lake dans le dossier
oss-mc-test/Demo_delta_pt/dt=20250612/. Pour plus de détails, consultez Charger des fichiers vers OSS.MaxCompute crée automatiquement des dossiers OSS lorsque les instructions SQL font référence à des tables externes incluant des fonctions définies par l'utilisateur (UDF). Dans les autres cas, créez le dossier manuellement.
-
Créez une table externe Delta Lake.
CREATE EXTERNAL TABLE test_delta_pt ( id INT ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'io.delta.hive.DeltaInputFormat' OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat' LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_delta_pt/'; -
Importez les métadonnées de partition. Pour les tables partitionnées, exécutez
MSCK REPAIR TABLEafin de détecter et d'enregistrer les partitions à partir du chemin OSS. Pour plus de détails, consultez Remplir les partitions pour une table externe OSS.MSCK REPAIR TABLE test_delta_pt ADD PARTITIONS; -
Interrogez la table.
SELECT * FROM test_delta_pt WHERE dt='20250612';