Les tables externes SequenceFile permettent d'interroger et d'écrire des données stockées au format Hadoop SequenceFile sur Object Storage Service (OSS) directement depuis MaxCompute, sans chargement préalable des données dans MaxCompute. Cette fonctionnalité est utile pour accéder à des charges de travail Hadoop ou Hive existantes depuis MaxCompute, ou pour partager des données entre différents systèmes.
Limitations
|
Limitation |
Détails |
|
Propriété |
Non prise en charge. N'incluez pas la propriété |
|
Taille d'un fichier unique |
Ne doit pas dépasser 2 Go. Divisez les fichiers supérieurs à 2 Go avant de les référencer dans une table externe. |
|
Région |
MaxCompute et OSS doivent se trouver dans la même région. |
Types de données pris en charge
Les types de données MaxCompute suivants sont pris en charge pour les tables externes SequenceFile. Pour la spécification complète des types, consultez les rubriques 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(précision, échelle) |
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>)]
STORED AS sequencefile
LOCATION '<oss_location>';
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
|
Oui |
Nom de la table externe dans MaxCompute. |
|
|
Oui |
Définitions des colonnes. Tous les types de données pris en charge sont répertoriés dans le tableau ci-dessus. |
|
|
Non |
Description facultative de la table. |
|
|
Non |
Définit les colonnes de partition. Si les données OSS sont organisées selon des partitions de style Hive (par exemple, |
|
|
Oui |
Spécifie le format de stockage SequenceFile. |
|
|
Oui |
Chemin OSS où sont stockées les données SequenceFile, au format |
Pour une référence complète des paramètres, consultez la rubrique Paramètres de syntaxe de base.
Écrire des données
Pour connaître la syntaxe d'écriture des données de MaxCompute vers OSS, consultez la rubrique Écrire des données dans OSS.
Interroger et analyser les données
Pour la syntaxe SELECT, consultez la rubrique Lire des données depuis OSS.
Pour des conseils sur les performances des requêtes, consultez la rubrique Optimisation des requêtes.
Exemple : créer, interroger et écrire dans une table externe SequenceFile
Cet exemple détaille la création d'une table externe SequenceFile partitionnée, le chargement d'un jeu de données test depuis OSS, l'interrogation des données et l'insertion d'une nouvelle ligne.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un projet MaxCompute. Consultez la rubrique Créer un projet.
Un compartiment OSS et un dossier situés dans la même région que votre projet MaxCompute. Consultez les rubriques Créer un compartiment et Gérer les dossiers.
Des autorisations d'accès OSS via un compte Alibaba Cloud, un utilisateur Resource Access Management (RAM) ou un rôle RAM. Consultez la rubrique Autoriser l'accès en mode STS pour OSS.
L'autorisation
CreateTabledans votre projet MaxCompute. Consultez la rubrique 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), vous pouvez utiliser une seule instruction pour lire et écrire dans les tables tout en utilisant les UDF. Vous pouvez également créer le dossier manuellement dans la console OSS avant d'exécuter les instructions ci-dessous.
Étape 1 : Télécharger les données de test
Connectez-vous à la console OSS et téléchargez le fichier de test 20250611TableSink dans le dossier external-table-test/sequence/dt=20250521/ de votre compartiment OSS. Pour obtenir des instructions de téléchargement, consultez la rubrique Télécharger des fichiers dans OSS.
Étape 2 : Créer la table externe
Créez une table externe SequenceFile partitionnée pointant vers le chemin OSS où sont stockées les données de test.
CREATE EXTERNAL TABLE mc_oss_extable_name_sequencefile1_pt
(
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitute STRING,
locationLongtitue STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (dt STRING)
STORED AS sequencefile
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/sequence/';
Étape 3 : Importer les données de partition
Étant donné que la table est partitionnée, exécutez la commande MSCK REPAIR TABLE afin de détecter et d'enregistrer les partitions déjà présentes dans OSS.
MSCK REPAIR TABLE mc_oss_extable_name_sequencefile1_pt ADD PARTITIONS;
Étape 4 : Interroger les données
SELECT * FROM mc_oss_extable_name_sequencefile1_pt WHERE dt=20250521;
La requête renvoie 11 lignes du jeu de données de test :
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 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 : Écrire des données
Insérez une nouvelle ligne dans la partition.
INSERT INTO mc_oss_extable_name_sequencefile1_pt PARTITION (dt='20250521')
VALUES
('1','16','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
Étape 6 : Vérifier l'écriture
Interrogez la ligne que vous venez d'insérer pour confirmer qu'elle a été écrite correctement.
SELECT * FROM mc_oss_extable_name_sequencefile1_pt WHERE dt=20250521 AND recordId='16';
Résultat attendu :
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 1 | 16 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
Étapes suivantes
Pour savoir comment les tables externes fonctionnent avec les fonctions définies par l'utilisateur (UDF), consultez la rubrique Paramètres de syntaxe de base.
Pour optimiser les performances des requêtes sur de grands jeux de données SequenceFile, consultez la rubrique Optimisation des requêtes.