Utilisez les tables externes RCFile pour interroger et écrire des données au format RCFile dans Object Storage Service (OSS) sans déplacer les données vers MaxCompute. OSS gère le stockage ; MaxCompute gère le schéma et l'exécution des requêtes.
Contraintes
|
Contrainte |
Détail |
|
Propriété de cluster |
Non prise en charge pour les tables externes OSS |
|
Limite de taille de fichier |
2 Go par fichier. Fractionnez les fichiers de plus de 2 Go avant de les référencer. |
|
Région |
MaxCompute et OSS doivent se trouver dans la même région |
Types de données pris en charge
Pour la liste complète des types de données MaxCompute, consultez les rubriques 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éer une table externe
Syntaxe
CREATE EXTERNAL TABLE [IF NOT EXISTS] mc_oss_rcfile_extable
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS rcfile
LOCATION 'oss_location';
Pour la description des paramètres, consultez la rubrique Paramètres de syntaxe de base.
Écrire des données
Pour la syntaxe d'écriture, consultez la rubrique Écrire des données dans OSS.
Interrogation et analyse
Pour la syntaxe SELECT, consultez la rubrique Lire des données depuis OSS.
Pour l'optimisation du plan de requête, consultez la rubrique Optimisation des requêtes.
Exemple de bout en bout
Cet exemple crée une table externe RCFile partitionnée, synchronise les métadonnées de partition depuis OSS, interroge les données et écrit un nouvel enregistrement.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un projet MaxCompute. Consultez la rubrique Créer un projet MaxCompute.
Un bucket OSS situé dans la même région que votre projet MaxCompute. Consultez les rubriques Créer un bucket et Gérer les dossiers. MaxCompute peut créer automatiquement des dossiers OSS ; il n'est pas nécessaire de les créer avant d'exécuter du code SQL.
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.
Étape 1 : Télécharger les données de test
Connectez-vous à la console OSS et téléchargez le fichier de données RCFile dans le dossier oss-mc-test/Rcfile/dt=20241223/. Consultez la rubrique Télécharger des fichiers dans OSS.
Étape 2 : Créer une table externe RCFile
CREATE EXTERNAL TABLE mc_oss_rcfile_extable
(
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitute STRING,
locationLongtitue STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (dt STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS rcfile
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Rcfile/';
Étape 3 : Synchroniser les métadonnées de partition
Pour les tables externes partitionnées, synchronisez les métadonnées de partition depuis OSS vers MaxCompute après le téléchargement des données :
-- Import partition data.
MSCK REPAIR TABLE mc_oss_rcfile_extable ADD PARTITIONS;
Pour la syntaxe complète, consultez la rubrique Syntaxe d'ajout de données de partition à une table externe OSS.
Étape 4 : Interroger la table externe
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20241223;
Résultat attendu :
+------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
| 1 | 1 | 7 | 1 | 39.995353 | 116.410101 | 2025/12/23 10:01 | NW | 20241223 |
| 1 | 2 | 15 | 1 | 39.996123 | 116.412345 | 2025/12/24 10:01 | NE | 20241223 |
| 2 | 3 | 22 | 2 | 40.001234 | 116.425678 | 2025/12/25 10:01 | SE | 20241223 |
| 1 | 4 | 71 | 1 | 39.998888 | 106.419999 | 2025/12/26 10:01 | NW | 20241223 |
| 3 | 5 | 50 | 1 | 29.989999 | 116.401111 | 2025/12/27 10:01 | NE | 20241223 |
| 2 | 6 | 28 | 3 | 40.003456 | 110.42891 | 2025/12/28 10:01 | NW | 20241223 |
| 4 | 7 | 20 | 2 | 39.991234 | 116.435555 | 2025/12/29 10:01 | NE | 20241223 |
| 1 | 8 | 13 | 1 | 39.994567 | 116.41789 | 2025/12/30 10:01 | SE | 20241223 |
+------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
Étape 5 : Écrire des données
INSERT INTO TABLE mc_oss_rcfile_extable2_pt PARTITION (dt=20251223) VALUES ('1','13','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
Étape 6 : Vérifier l'écriture
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20250521 AND recordId='13';
Résultat attendu :
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| 1 | 13 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20251223 |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+