Tous les produits
Search
Centre de documentation

MaxCompute:LOAD

Dernière mise à jour :Aug 21, 2026

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

table_name

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.

pt_spec

Non

Spécification de la partition. Format : (partition_col1 = partition_col_value1, ...). Omettez la valeur lors de l'utilisation de partitions dynamiques.

oss_location

Oui

Chemin du répertoire OSS. Format : 'oss://<oss_endpoint>/<object>'. MaxCompute lit tous les fichiers de ce répertoire. Pour plus de détails sur les endpoints, consultez la rubrique Accéder à OSS à l'aide des endpoints et des noms de domaine de bucket.

StorageHandler

Oui (CSV/TSV)

Classe de gestionnaire de stockage intégrée. Utilisez 'com.aliyun.odps.CsvStorageHandler' pour les fichiers CSV.

serde_class

Non

Classe SerDe pour les formats open source. Par exemple, utilisez 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' pour les fichiers Parquet.

file_format

Oui (open source)

Format de fichier. Valeurs prises en charge : ORC, PARQUET, RCFILE, SEQUENCEFILE, TEXTFILE, JSON, AVRO.

SERDEPROPERTIES

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

odps.properties.rolearn

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.

odps.text.option.delimiter

Non

Délimiteur de colonne pour les fichiers CSV. La valeur par défaut est la virgule (,).

field.delim

Non

Délimiteur de champ pour LazySimpleSerDe.

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

table_name

Oui

Nom de la table interne MaxCompute cible. La table doit exister avant le chargement.

pt_spec

Non

Spécification de la partition. Format : (partition_col1 = partition_col_value1, ...).

hologres_location

Oui

URL de connexion JDBC pour la table source Hologres. Format : `'jdbc:postgresql://:/?ApplicationName=MaxCompute&[currentSchema=&]useSSL={true

false}&table=/'`.

StorageHandler

Oui

Valeur fixe : 'com.aliyun.odps.jdbc.JdbcStorageHandler'.

Sous-paramètres de l'URL d'emplacement Hologres :

Sous-paramètre

Obligatoire

Description

endpoint

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.

port

Oui

Port réseau de l'instance Hologres.

database

Oui

Nom de la base de données Hologres. Consultez la rubrique CREATE DATABASE.

ApplicationName

Oui

Valeur fixe : MaxCompute.

schema

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.

holo_table_name

Oui

Nom de la table source Hologres. Consultez la rubrique CREATE TABLE.

Propriétés SERDEPROPERTIES requises pour Hologres :

Propriété

Obligatoire

Description

odps.properties.rolearn

Oui

ARN du rôle RAM pour l'accès à Hologres.

mcfed.mapreduce.jdbc.driver.class

Oui

Valeur fixe : 'org.postgresql.Driver'.

odps.federation.jdbc.target.db.type

Oui

Valeur fixe : 'holo'.

odps.federation.jdbc.colmapping

Non

Mappage des colonnes entre les colonnes MaxCompute et Hologres. Par défaut, le mappage s'effectue par nom. Format : MaxCompute_column1:"Hologres_column1"[,MaxCompute_column2:"Hologres_column2",...]. Entourez les noms de colonnes Hologres de guillemets doubles s'ils contiennent des lettres majuscules.

mcfed.mapreduce.jdbc.input.query

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 : SELECT xxx FROM <holo_database_name>.<holo_schema_name>.<holo_table_name>.

Comportement du mappage des colonnes :

  • Si odps.federation.jdbc.colmapping n'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&currentSchema=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.