MaxCompute permet de lire et d'écrire des fichiers au format Avro stockés dans Object Storage Service (OSS) à l'aide de tables externes, sans déplacer les données vers le stockage interne de MaxCompute.
Les tables externes Avro vous permettent de :
Interroger directement les fichiers Avro dans OSS via SQL
Écrire les données de MaxCompute vers OSS au format Avro
Partitionner les données pour optimiser le filtrage des requêtes
Utiliser l'analyseur de données open source intégré, sans code de sérialisation personnalisé
Limitations
|**Contrainte**
|
**Détail**
| | --- | --- | |
Propriété cluster
|
Les tables externes OSS ne prennent pas en charge la propriété cluster
| |
Taille de fichier unique
|
2 Go maximum. Fractionnez les fichiers dépassant 2 Go avant de créer la table externe
| |
Région
|
MaxCompute et OSS doivent se trouver dans la même région
|
Types de données pris en charge
Le tableau suivant répertorie les types de données MaxCompute pris en charge pour les tables externes Avro. Pour la référence complète des types, consultez Types de données (V1.0) et Types de données (V2.0).
|**Type de données**
|
**Pris en charge**
| | --- | --- | |
STRING
|
Oui
| |
INT
|
Oui
| |
FLOAT
|
Oui
| |
DOUBLE
|
Oui
| |
BOOLEAN
|
Oui
| |
ARRAY
|
Oui
| |
MAP
|
Oui
| |
TINYINT
|
Non
| |
SMALLINT
|
Non
| |
BIGINT
|
Non
| |
BINARY
|
Non
| |
DECIMAL(precision,scale)
|
Non
| |
VARCHAR(n)
|
Non
| |
CHAR(n)
|
Non
| |
DATE
|
Non
| |
DATETIME
|
Non
| |
TIMESTAMP
|
Non
| |
TIMESTAMP_NTZ
|
Non
| |
STRUCT
|
Non
| |
JSON
|
Non
|
Création d'une table externe Avro
Syntaxe
CREATE EXTERNAL TABLE <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED AS avro
LOCATION '<oss_location>';
Paramètres
Pour la description des paramètres, consultez Paramètres de la syntaxe de base.
Écriture des données
Pour la syntaxe d'écriture, consultez Écriture des données dans OSS.
Interrogation et analyse
Pour la syntaxe SELECT, consultez Lecture des données depuis OSS.
Pour l'optimisation du plan de requête, consultez Optimisation des requêtes.
Exemple : création, écriture et interrogation d'une table externe Avro
Cet exemple détaille la création d'une table externe Avro partitionnée, l'importation des métadonnées de partition, la lecture des données et l'insertion d'une nouvelle ligne.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un bucket OSS situé dans la même région que votre projet MaxCompute. Consultez Création d'un bucket et Gestion des dossiers
Des autorisations d'accès à OSS accordées via un compte Alibaba Cloud, un utilisateur Resource Access Management (RAM) ou un rôle RAM. Consultez Autorisation d'accès en mode STS pour OSS
L'autorisation
CreateTabledans le projet MaxCompute. Consultez Autorisations MaxCompute
MaxCompute prend en charge la création automatique de dossiers dans OSS. Si une instruction SQL implique des tables externes et des fonctions définies par l'utilisateur (UDF), une seule instruction peut lire et écrire dans les tables tout en appliquant les UDF.
Étape 1 : Chargement des données de test
Connectez-vous à la console OSS et chargez le fichier de données de test 20250612TableSink dans le dossier external-table-test/avro/dt=20250521/ de votre bucket. Pour les instructions de chargement, consultez Chargement de fichiers.
Étape 2 : Création d'une table externe Avro
CREATE EXTERNAL TABLE mc_oss_extable_name_avro_pt
(
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitute STRING,
locationLongtitue STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (dt STRING)
STORED AS avro
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/avro/';
Étape 3 : Importation des métadonnées de partition
Pour les tables externes partitionnées, exécutez MSCK REPAIR TABLE afin d'enregistrer les partitions OSS existantes dans MaxCompute :
MSCK REPAIR TABLE mc_oss_extable_name_avro_pt ADD PARTITIONS;
Étape 4 : Lecture des données depuis la table externe Avro
SELECT * FROM mc_oss_extable_name_avro_pt WHERE dt=20250521;
Le résultat suivant est renvoyé :
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 1 | 12 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20250521 |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:01 | NE | 20250521 |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:02 | NE | 20250521 |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:03 | W | 20250521 |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:04 | S | 20250521 |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:05 | S | 20250521 |
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:06 | N | 20250521 |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:07 | SW | 20250521 |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:08 | NE | 20250521 |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:09 | N | 20250521 |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
Étape 5 : Écriture des données dans la table externe Avro
INSERT INTO mc_oss_extable_name_avro_pt PARTITION (dt='20250521') VALUES ('1','16','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
Étape 6 : Vérification des données écrites
SELECT * FROM mc_oss_extable_name_avro_pt WHERE dt=20250521;
Le résultat suivant est renvoyé, avec la ligne nouvellement insérée (recordId 16) en tête :
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 1 | 16 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
| 1 | 12 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20250521 |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:01 | NE | 20250521 |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:02 | NE | 20250521 |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:03 | W | 20250521 |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:04 | S | 20250521 |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:05 | S | 20250521 |
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:06 | N | 20250521 |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:07 | SW | 20250521 |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:08 | NE | 20250521 |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:09 | N | 20250521 |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+