Cette rubrique explique comment créer, lire et écrire des données dans des tables externes OSS au format Hudi.
MaxCompute prend uniquement en charge la fonctionnalité de table externe pour la version publiée du SDK Hudi. Aucune mise à jour ni amélioration fonctionnelle ne sera fournie. Utilisez les tables externes Paimon pour lire les données aux formats de table de lac de données.
Limites
Avant de créer une table externe Hudi, examinez les contraintes suivantes :
Les tables externes OSS ne prennent pas en charge la propriété
cluster.La taille maximale d'un fichier est de 2 Go. Scindez les fichiers dépassant cette limite avant de les lire.
MaxCompute et Object Storage Service (OSS) doivent se trouver dans la même région.
-
Les tables externes Hudi permettent uniquement la lecture intégrale des données des fichiers mappés. Les opérations suivantes ne sont pas prises en charge :
Masquage automatique des colonnes système
Lectures incrémentielles
Lectures instantanées (snapshot)
Opérations d'écriture
Pour les opérations nécessitant les propriétés ACID (atomicité, cohérence, isolation et durabilité), utilisez plutôt les tables Delta MaxCompute ou les tables externes Paimon.
La version par défaut du SDK Hudi intégrée à MaxCompute est
org.apache.hudi:hudi-hadoop-mr-bundle:0.12.2-emr-1.0.6. MaxCompute ne garantit pas la compatibilité ascendante ou descendante du SDK Hudi ; cette responsabilité incombe à la communauté open source.Pour les tables externes partitionnées, exécutez
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;après la création de la table afin d'enregistrer les partitions OSS existantes dans MaxCompute. Les requêtes sur une table partitionnée ne renvoient aucune donnée tant que cette étape n'est pas effectuée.
Types de données pris en charge
Pour la référence complète des types, consultez les sections Types de données (version 1.0) et Types de données (version 2.0).
|**Type de données**
|
**Prise en charge**
|
**Type de données**
|
**Prise en charge**
| | --- | --- | --- | --- | |
TINYINT
|
✓
|
STRING
|
✗
| |
SMALLINT
|
✓
|
DATE
|
✗
| |
INT
|
✓
|
DATETIME
|
✗
| |
BIGINT
|
✓
|
TIMESTAMP
|
✗
| |
BINARY
|
✓
|
TIMESTAMP_NTZ
|
✗
| |
FLOAT
|
✗
|
BOOLEAN
|
✓
| |
DOUBLE
|
✗
|
ARRAY
|
✓
| |
DECIMAL(precision,scale)
|
✓
|
MAP
|
✗
| |
VARCHAR(n)
|
✗
|
STRUCT
|
✗
| |
CHAR(n)
|
✗
|
JSON
|
✗
|
Création d'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 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'oss_location';
Utilisez les valeurs INPUTFORMAT, OUTPUTFORMAT et ROW FORMAT SERDE exactement comme indiqué. Pour la description des autres paramètres, consultez la section Paramètres de syntaxe de base.
Interrogation des données
Pour la syntaxe SELECT, consultez la section Lecture des données depuis OSS.
Pour l'optimisation du plan de requête, consultez la section Optimisation des requêtes.
Exemple
Cet exemple montre comment créer une table externe Hudi partitionnée, enregistrer ses partitions et interroger les données.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un bucket et un dossier OSS situés dans la même région que votre projet MaxCompute. Pour créer un bucket, consultez la page Créer un bucket. Pour créer un dossier, consultez la page Gérer les dossiers. MaxCompute prend également en charge la création automatique de dossiers dans OSS.
Des autorisations d'accès OSS accordées à un compte Alibaba Cloud, à un utilisateur Resource Access Management (RAM) ou à un rôle RAM. Pour plus de détails, consultez la page Autoriser l'accès en mode STS pour OSS
L'autorisation
CreateTabledans le projet MaxCompute. Pour plus de détails, consultez la page Autorisations MaxCompute
Étape 1 : Chargement des données de test
Connectez-vous à la console OSS et chargez le fichier de données de test au format Hudi dans le dossier oss-mc-test/Demo_hudi_pt/dt=20250612/. Pour plus de détails, consultez la section Charger des fichiers dans OSS.
Étape 2 : Création d'une table externe Hudi
Exécutez l'instruction suivante pour créer une table externe Hudi partitionnée mappée à l'emplacement OSS :
CREATE EXTERNAL TABLE vehicle_hudi_pt (
_hoodie_commit_time string,
_hoodie_commit_seqno string,
_hoodie_record_key string,
_hoodie_partition_path string,
_hoodie_file_name STRING,
id STRING,
name STRING
)
PARTITIONED BY (ds STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_hudi_pt/';
Étape 3 : Enregistrement des partitions
Après avoir créé une table externe partitionnée, enregistrez ses partitions OSS dans MaxCompute. Sans cette étape, les requêtes ne renvoient aucune donnée.
MSCK REPAIR TABLE vehicle_hudi_pt ADD PARTITIONS;
Pour la syntaxe complète des partitions, consultez la section Syntaxe d'ajout de données de partition à une table externe OSS.
Étape 4 : Interrogation de la table
SELECT * FROM vehicle_hudi_pt WHERE ds='20250612';