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.
Présentation
MaxCompute utilise les commandes LOAD OVERWRITE ou LOAD INTO pour importer des données au format CSV ou d'autres formats open source depuis un stockage externe, tel que Qu'est-ce que Hologres ?, Qu'est-ce qu'OSS ?, Amazon Redshift et BigQuery, vers une table ou une partition MaxCompute.
Vous devez d'abord importer les données d'Amazon Redshift et de BigQuery vers OSS avant de pouvoir les charger dans MaxCompute.
MaxCompute utilise le partitionnement dynamique pour charger des données dans des tables partitionnées.
La commande
LOAD INTOajoute des données à une table ou à une partition. La commandeLOAD OVERWRITEefface d'abord la table ou la partition, puis insère les nouvelles données.
Limites
Exigences en matière d'autorisations
-
Autorisations MaxCompute
Autorisations CreateTable et Alter : requises pour créer des tables ou modifier les données de table dans un projet MaxCompute. Pour obtenir des instructions, consultez la section Autorisations MaxCompute.
-
Autorisations de stockage externe
Autorisations OSS : vous devez accorder à MaxCompute les autorisations d'accès à OSS (lecture et liste des objets). Pour une sécurité renforcée, utilisez le mode STS pour l'autorisation. Pour plus d'informations, consultez la section Autoriser l'accès en mode STS.
Autorisations Hologres : pour autoriser MaxCompute à accéder à Hologres, créez un rôle RAM, accordez-lui les autorisations requises et ajoutez le rôle à l'instance Hologres. Pour plus de détails, consultez la section Créer une table externe Hologres (mode STS).
Autres limites
La commande LOAD ne prend pas en charge les paramètres allowlist/denylist.
Le stockage externe et le projet MaxCompute cible doivent se trouver dans la même région.
-
Lorsque vous chargez des données depuis 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. Le schéma des données externes ne doit pas inclure les colonnes de partition.
-
Lorsque vous chargez des données depuis Hologres :
Vous ne pouvez pas charger de données depuis une table partitionnée Hologres vers MaxCompute.
MaxCompute ne peut pas charger de données depuis une table externe Hologres qui utilise le mode d'autorisation à double signature.
Charger des données
OSS et Hologres
Charger des données depuis OSS ou Hologres
Syntaxe de la commande
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES (<Options>)];
Paramètres
OSS
Hologres
Exemples
OSS
Cet exemple montre comment charger des données à l'aide d'un extracteur intégré (StorageHandler). Il suppose que MaxCompute et OSS appartiennent au même compte Alibaba Cloud et explique comment charger des données du fichier vehicle.csv vers MaxCompute via le réseau interne Alibaba Cloud.
-
Enregistrez le fichier vehicle.csv dans le répertoire
mc-test/data_location/d'un bucket OSS dans la régionoss-cn-hangzhou, puis construisez le chemin d'accès au répertoire OSS. Pour plus d'informations sur la création d'un bucket OSS, consultez la section Créer un bucket.Le chemin d'accès au répertoire OSS est construit à partir des informations de bucket, de région et de point de terminaison comme suit :
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ -
Connectez-vous au client MaxCompute (odpscmd) pour créer la table cible
ambulance_data_csv_load. Exemple de commande :CREATE TABLE ambulance_data_csv_load ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ); -
Exécutez la commande
load overwritepour charger le fichiervehicle.csvdepuis OSS vers la table cible. Exemple de commande :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 ( -- The ARN of AliyunODPSDefaultRole. You can obtain it on the RAM role management page. 'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole', 'odps.text.option.delimiter'=',' );Pour afficher l'ARN d'un rôle, consultez la section Afficher un rôle RAM.
-
Vérifiez les données dans la table cible
ambulance_data_csv_load. Exemple de commande :-- Enable a full table scan. This setting is valid only for the current session. set odps.sql.allow.fullscan=true; SELECT * FROM ambulance_data_csv_load; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+------------+------------+ | 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 | +------------+------------+------------+------------+------------------+-------------------+------------+------------+
Hologres
-
Scénario
Une instance et une base de données Hologres ont été créées, et une table a été créée dans la base de données.
Une table externe Hologres a été créée dans MaxCompute. Vous pouvez interroger les données de la table Hologres à l'aide de la table externe.
-- Query the Hologres external table: SELECT * FROM holo_ext; -- The following result is returned: +------------+------+ | id | name | +------------+------+ | 1 | abc | | 2 | ereg | +------------+------+ -
L'exemple suivant montre comment utiliser la commande LOAD pour charger des données de cette table Hologres vers une table interne MaxCompute.
-
Créez une table interne MaxCompute.
-- Create an internal table. CREATE TABLE from_holo(id BIGINT, name STRING); -
Utilisez la commande LOAD pour charger des données dans MaxCompute.
-- Load data from the Hologres table into a MaxCompute internal table. 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' );
-
-
Interrogez la table pour voir le résultat.
SELECT * FROM from_holo; -- The following result is returned: +------------+------+ | id | name | +------------+------+ | 2 | ereg | | 1 | abc | +------------+------+
Autres formats open source
Charger des données dans d'autres formats open source
La taille d'un seul fichier à charger ne peut pas dépasser 3 Go. Si un fichier est trop volumineux, divisez-le avant le chargement.
Syntaxe de la commande
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
[ROW FORMAT SERDE '<serde_class>'
[WITH SERDEPROPERTIES (<Options>)]
]
STORED AS <file_format>;
Paramètres
Exemples
Même compte
Propriété du même compte
Cet exemple illustre le chargement de données depuis le fichier vehicle.textfile vers MaxCompute via le réseau interne d'Alibaba Cloud.
Si MaxCompute et OSS appartiennent à des comptes Alibaba Cloud différents, consultez la section Autorisation en mode STS.
-
Enregistrez le fichier vehicle.textfile dans le répertoire
mc-test/data_location/d'un bucket OSS situé dans la régionoss-cn-hangzhou, puis construisez le chemin d'accès au répertoire OSS. Pour plus d'informations sur la création d'un bucket OSS, consultez la rubrique Créer un bucket.Le chemin d'accès au répertoire OSS est construit à partir des informations relatives au bucket, à la région et à l'endpoint comme suit :
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ -
Connectez-vous au client MaxCompute (odpscmd) pour créer la table cible
ambulance_data_textfile_load_pt. Exemple de commande :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 ); -
Exécutez la commande
load overwritepour charger le fichiervehicle.textfiledepuis OSS vers la table cible. Exemple de commande :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; -
Vérifiez les données dans la table cible ambulance_data_textfile_load_pt. Exemple de commande :
-- Enable a full table scan. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT * FROM ambulance_data_textfile_load_pt; -- The following result is returned: +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+ | 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 | +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
Partitions dynamiques
Charger des données à l'aide de partitions dynamiques
Vous pouvez utiliser les partitions dynamiques pour charger des données lorsque vos sous-répertoires OSS sont nommés selon des paires clé-valeur de partition, par exemple ds=20200909/.
-
Enregistrez respectivement les fichiers vehicle1.csv et vehicle2.csv dans les répertoires
mc-test/data_location/ds=20200909/etmc-test/data_location/ds=20200910/d'un bucket OSS situé dans la régionoss-cn-hangzhou, puis construisez les chemins d'accès aux répertoires OSS. Pour plus d'informations sur la création d'un bucket OSS, consultez la rubrique Créer un bucket.Les chemins d'accès aux répertoires OSS sont construits à partir des informations relatives au bucket, à la région et à l'endpoint comme suit :
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/' -
Connectez-vous au client MaxCompute (odpscmd) pour créer la table cible
ambulance_data_csv_load_dynpt. Exemple de commande :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 ); -
Exécutez la commande
load overwritepour charger les fichiers depuis OSS vers la table cible. Exemple de commande :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; -
Vérifiez les données dans la table cible
ambulance_data_csv_load_dynpt. Exemple de commande :-- Enable a full table scan. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT * FROM ambulance_data_csv_load_dynpt; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | 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 | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
Facturation
La commande LOAD importe des données externes dans l'entrepôt de données. Bien que vous ne soyez pas facturé pour le volume de données importées selon le modèle de paiement à l'utilisation ni pour les tâches individuelles selon le modèle d'abonnement, toutes les tâches LOAD consomment des ressources de calcul de leur groupe de ressources.
Références
Pour exporter des données d'un projet MaxCompute vers un stockage externe, tel qu'OSS ou Hologres, afin qu'elles soient utilisées par d'autres moteurs de calcul, consultez la rubrique UNLOAD.