Utilisez l'instruction LOAD pour charger des données depuis des magasins de données externes (par exemple, OSS, Hologres, Amazon Redshift ou BigQuery) vers une table ou une partition MaxCompute.
Fonctionnement
L'instruction LOAD OVERWRITE vide la table ou la partition cible avant d'écrire les données. L'instruction LOAD INTO ajoute les données à une table ou une partition existante sans supprimer les lignes présentes. Par défaut, ces deux commandes lisent tous les fichiers du répertoire spécifié.
Les données provenant d'Amazon Redshift et de BigQuery doivent être stockées temporairement dans OSS avant de pouvoir être chargées dans MaxCompute.
MaxCompute utilise le partitionnement dynamique pour charger des données dans des tables partitionnées lorsque les sous-répertoires OSS respectent la convention de nommage key=value (par exemple, ds=20200909/).
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un projet MaxCompute disposant des autorisations CreateTable et Alter. Pour plus d'informations, consultez la rubrique Autorisations MaxCompute.
Pour les sources OSS : MaxCompute doit être autorisé à lire et lister les objets OSS. Pour une sécurité renforcée, utilisez le mode STS. Consultez la rubrique Autoriser l'accès en mode STS.
Pour les sources Hologres : Un rôle RAM disposant des autorisations requises doit être ajouté à l'instance Hologres. Consultez la rubrique Créer une table externe Hologres (mode STS).
Limites
La commande LOAD ne prend pas en charge les paramètres de liste d'autorisation ou de liste de blocage.
Le stockage externe et le projet MaxCompute cible doivent se trouver dans la même région.
OSS :Console OSSConsole OSSConsole OSS Le schéma de la table partitionnée cible (à l'exclusion des colonnes de partition) doit correspondre au schéma des données externes. Les données externes ne doivent pas inclure les colonnes de partition.
Hologres : Il est impossible de charger des données depuis une table partitionnée Hologres. Il est également impossible de charger des données depuis une table externe Hologres utilisant l'autorisation par double signature. MaxCompute se connecte à Hologres uniquement via un nom de domaine de réseau classique ; les noms de domaine VPC ne sont pas pris en charge.
Formats open source : Un fichier unique ne peut pas dépasser 3 Go. Divisez les fichiers volumineux avant le chargement.
Charger des données depuis OSS
Syntaxe
Fichiers CSV et TSV :
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <oss_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>', ...)];
Formats open source (ORC, Parquet, TextFile, etc.) :
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <oss_location>
[ROW FORMAT SERDE '<serde_class>'
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>', ...)]
]
STORED AS <file_format>;
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
|
Oui |
Nom de la table cible. La table doit exister avant le chargement. Son schéma (à l'exclusion des colonnes de partition) doit correspondre aux données externes. |
|
|
Non |
Spécification de la partition. Format : |
|
|
Oui |
Chemin du répertoire OSS. Format : |
|
|
Oui (CSV/TSV) |
Classe de gestionnaire de stockage intégrée. Utilisez |
|
|
Non |
Classe SerDe pour les formats open source. Par exemple, utilisez |
|
|
Oui (open source) |
Format de fichier. Valeurs prises en charge : |
|
|
Variable |
Propriétés du SerDe. Prend en charge les mêmes propriétés que les tables externes MaxCompute. Consultez la rubrique Créer une table externe OSS. |
Propriétés SERDEPROPERTIES courantes pour OSS :
|
Propriété |
Obligatoire |
Description |
|
|
Oui |
ARN du rôle RAM pour l'accès à OSS. Pour afficher l'ARN d'un rôle, consultez la rubrique Afficher un rôle RAM. |
|
|
Non |
Délimiteur de colonne pour les fichiers CSV. La valeur par défaut est la virgule ( |
|
|
Non |
Délimiteur de champ pour |
Charger un fichier CSV depuis OSS
Cet exemple charge le fichier vehicle.csv depuis OSS vers la table MaxCompute ambulance_data_csv_load. MaxCompute et OSS appartiennent au même compte Alibaba Cloud, et les transferts de données s'effectuent via le réseau interne d'Alibaba Cloud.
1. Autorisez MaxCompute à accéder à OSS.
Cliquez ici pour une autorisation en un clic.
2. Téléchargez le fichier source vers OSS.
Enregistrez le fichier vehicle.csv dans le répertoire mc-test/data_location/ d'un bucket OSS situé dans la région oss-cn-hangzhou. Pour plus de détails sur la création d'un bucket, consultez la rubrique Créer un bucket.
Le chemin du répertoire OSS résultant est le suivant :
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
3. Créez la table cible et chargez les données.
Connectez-vous au client MaxCompute (odpscmd) et exécutez la commande suivante :
-- Create the target table.
CREATE TABLE ambulance_data_csv_load (
vehicleId INT,
recordId INT,
patientId INT,
calls INT,
locationLatitude DOUBLE,
locationLongitude DOUBLE,
recordTime STRING,
direction STRING
);
-- Load the CSV file into the table.
LOAD OVERWRITE TABLE ambulance_data_csv_load
FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
STORED BY 'com.aliyun.odps.CsvStorageHandler'
WITH SERDEPROPERTIES (
-- ARN of AliyunODPSDefaultRole. Obtain it from the RAM role management page.
'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole',
'odps.text.option.delimiter'=','
);
4. Vérifiez le résultat.
-- Enable a full table scan (effective for the current session only).
SET odps.sql.allow.fullscan=true;
SELECT * FROM ambulance_data_csv_load;
-- Expected output:
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S |
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | SW |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+
Charger un fichier TextFile depuis OSS vers une table partitionnée
Cet exemple charge le fichier vehicle.textfile depuis OSS vers une partition spécifique de la table ambulance_data_textfile_load_pt.
1. Autorisez MaxCompute à accéder à OSS.
Cliquez ici pour une autorisation en un clic.
Si MaxCompute et OSS appartiennent à des comptes Alibaba Cloud différents, consultez la rubrique Autorisation en mode STS avant de poursuivre.
2. Téléchargez le fichier source vers OSS.
Enregistrez le fichier vehicle.textfile dans le répertoire mc-test/data_location/ d'un bucket OSS situé dans la région oss-cn-hangzhou.
Le chemin du répertoire OSS résultant est le suivant :
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
3. Créez la table cible et chargez les données.
-- Create the target partitioned table.
CREATE TABLE ambulance_data_textfile_load_pt (
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitude STRING,
locationLongitude STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (ds STRING);
-- Load data into the ds='20200910' partition.
LOAD OVERWRITE TABLE ambulance_data_textfile_load_pt PARTITION(ds='20200910')
FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('field.delim' = ',')
STORED AS TEXTFILE;
4. Vérifiez le résultat.
-- Enable a full table scan (effective for the current session only).
SET odps.sql.allow.fullscan=true;
SELECT * FROM ambulance_data_textfile_load_pt;
-- Expected output:
+-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
| vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | ds |
+-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W | 20200910 |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 |
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200910 |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | SW | 20200910 |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200910 |
+-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
Charger des données avec des partitions dynamiques
Utilisez des partitions dynamiques lorsque les sous-répertoires OSS sont nommés avec des paires clé-valeur de partition (par exemple, ds=20200909/). MaxCompute déduit les valeurs de partition à partir des noms de répertoire, vous devez donc spécifier uniquement la clé de partition dans la clause PARTITION.
1. Autorisez MaxCompute à accéder à OSS.
Cliquez ici pour une autorisation en un clic.
2. Téléchargez les fichiers sources vers OSS.
Enregistrez le fichier vehicle1.csv dans le répertoire mc-test/data_location/ds=20200909/ et le fichier vehicle2.csv dans le répertoire mc-test/data_location/ds=20200910/ d'un bucket OSS situé dans la région oss-cn-hangzhou.
Les chemins des répertoires OSS résultants sont les suivants :
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200909/
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200910/
3. Créez la table cible et chargez les données.
-- Create the target partitioned table.
CREATE TABLE ambulance_data_csv_load_dynpt (
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitude STRING,
locationLongitude STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (ds STRING);
-- Load data using dynamic partitions.
-- MaxCompute reads the partition value from each subdirectory name.
LOAD OVERWRITE TABLE ambulance_data_csv_load_dynpt PARTITION(ds)
FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
STORED AS TEXTFILE;
4. Vérifiez le résultat.
-- Enable a full table scan (effective for the current session only).
SET odps.sql.allow.fullscan=true;
SELECT * FROM ambulance_data_csv_load_dynpt;
-- Expected output:
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | ds |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200909 |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | SW | 20200909 |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200909 |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200909 |
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W | 20200910 |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
Charger des données depuis Hologres
Syntaxe
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <hologres_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>', ...)];
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
|
|
Oui |
Nom de la table interne MaxCompute cible. La table doit exister avant le chargement. |
|
|
|
Non |
Spécification de la partition. Format : |
|
|
|
Oui |
URL de connexion JDBC pour la table source Hologres. Format : |
false}&table= |
|
|
Oui |
Valeur fixe : |
Sous-paramètres de l'URL d'emplacement Hologres :
|
Sous-paramètre |
Obligatoire |
Description |
|
|
Oui |
Nom de domaine de réseau classique de l'instance Hologres. Pour l'obtenir, consultez la rubrique Détails de l'instance. Les noms de domaine VPC ne sont pas pris en charge. |
|
|
Oui |
Port réseau de l'instance Hologres. |
|
|
Oui |
Nom de la base de données Hologres. Consultez la rubrique CREATE DATABASE. |
|
|
Oui |
Valeur fixe : |
|
|
Non |
Nom du schéma Hologres. Omettez ce paramètre si le nom de la table est unique dans la base de données ou si la table source se trouve dans le schéma par défaut. Consultez la rubrique CREATE SCHEMA. |
|
|
Oui |
Nom de la table source Hologres. Consultez la rubrique CREATE TABLE. |
Propriétés SERDEPROPERTIES requises pour Hologres :
|
Propriété |
Obligatoire |
Description |
|
|
Oui |
ARN du rôle RAM pour l'accès à Hologres. |
|
|
Oui |
Valeur fixe : |
|
|
Oui |
Valeur fixe : |
|
|
Non |
Mappage des colonnes entre les colonnes MaxCompute et Hologres. Par défaut, le mappage s'effectue par nom. Format : |
|
|
Non |
Requête SQL personnalisée pour lire les données depuis Hologres. Le schéma du jeu de résultats (noms et types de colonnes) doit correspondre à celui de la table externe MaxCompute. Format : |
Comportement du mappage des colonnes :
Si
odps.federation.jdbc.colmappingn'est pas défini, les colonnes sont mappées par nom.Si ce paramètre est défini uniquement pour un sous-ensemble de colonnes, les colonnes restantes sont mappées par nom. Une erreur se produit si des colonnes non mappées présentent des noms ou des types incompatibles.
Charger des données depuis une table Hologres
Cet exemple charge les données de la table Hologres holo_ext dans la table interne MaxCompute from_holo.
Données source dans Hologres :
-- Query the Hologres external table:
SELECT * FROM holo_ext;
-- Result:
+------------+------+
| id | name |
+------------+------+
| 1 | abc |
| 2 | ereg |
+------------+------+
1. Créez la table cible MaxCompute.
CREATE TABLE from_holo (id BIGINT, name STRING);
2. Chargez les données depuis Hologres.
LOAD INTO TABLE from_holo
FROM LOCATION 'jdbc:postgresql://hgprecn-cn-wwo3ft0l****-cn-beijing-internal.hologres.aliyuncs.com:80/<YOUR_HOLO_DB_NAME>?application_name=MaxCompute¤tSchema=public&useSSL=false&table=<YOUR_HOLOGRES_TABLE_NAME>/'
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH SERDEPROPERTIES (
'odps.properties.rolearn'='acs:ram::18927322887*****:role/hologresrole',
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo'
);
3. Vérifiez le résultat.
SELECT * FROM from_holo;
-- Expected output:
+------------+------+
| id | name |
+------------+------+
| 2 | ereg |
| 1 | abc |
+------------+------+
Facturation
Toutes les tâches LOAD consomment des ressources de calcul du groupe de ressources associé. Dans le modèle de paiement à l'utilisation, vous n'êtes pas facturé pour le volume de données importées. Dans le modèle d'abonnement, les tâches LOAD individuelles ne sont pas facturées séparément.
Étapes suivantes
Pour exporter des données depuis MaxCompute vers OSS ou Hologres, consultez la rubrique UNLOAD.