AnalyticDB for MySQL permet d'exporter des données depuis AnalyticDB for MySQL Data Warehouse Edition (V3.0) vers Object Storage Service (OSS) à l'aide de tables externes et de l'instruction INSERT INTO. Cette fonctionnalité d'exportation prend uniquement en charge les formats de fichier CSV et Parquet.
Prérequis
-
Créez un répertoire dans Object Storage Service (OSS) pour les données provenant de AnalyticDB for MySQL :
-
Remarque
Le compartiment OSS et votre cluster AnalyticDB for MySQL Data Warehouse Edition (V3.0) doivent se trouver dans la même région.
-
Par exemple, créez un répertoire nommé
adb_data/dans OSS. Les données exportées depuis AnalyticDB for MySQL Data Warehouse Edition (V3.0) sont stockées dans ce répertoire.
-
Vous avez créé un cluster Data Warehouse Edition (V3.0), configuré sa liste d'autorisation, ainsi qu'un compte et une base de données. Pour plus d'informations, consultez la section Démarrage rapide pour AnalyticDB for MySQL.
Si le cluster AnalyticDB for MySQL Data Warehouse Edition est en mode élastique, connectez-vous à la console AnalyticDB for MySQL pour activer le réseau ENI (Elastic Network Interface). Dans le panneau Network Information de l'instance, activez l'interrupteur ENI Network. Le réseau ENI doit être activé pour que les instances en mode élastique puissent importer des données à l'aide de tables externes.
Procédure
Cet exemple illustre l'exportation des données de la table source_table de la base de données adb_demoAnalyticDB for MySQLData Warehouse Edition vers le dossier adb_data dans OSS.
Connectez-vous au cluster cible et accédez à la base de données source.
Dans la base de données
adb_demo, créez une table externe. Pour plus d'informations, consultez la section Tables externes OSS non partitionnées.Exécutez une instruction d'écriture pour copier les données source vers la table externe créée précédemment. Pour connaître la syntaxe prise en charge selon les types de tables externes, reportez-vous aux sections Syntaxe des tables externes non partitionnées et Syntaxe des tables externes partitionnées.
Une fois la tâche d'écriture de l'étape 3 terminée, connectez-vous à la console OSS pour consulter les fichiers de données exportés dans le dossier de destination. Vous pouvez également interroger directement les données exportées vers la table externe depuis AnalyticDB for MySQL.
Syntaxe des tables externes non partitionnées
Lorsque vous utilisez INSERT INTO ou INSERT OVERWRITE SELECT pour écrire des données, la tâche s'exécute par défaut de manière synchrone. Si vous écrivez un volume important de données, par exemple plusieurs centaines de gigaoctets, la connexion entre le client et le serveur AnalyticDB for MySQL peut expirer, ce qui entraîne l'échec de la tâche. Par conséquent, pour l'écriture de grands volumes de données, nous vous recommandons d'exécuter l'instruction INSERT OVERWRITE SELECT de manière asynchrone en ajoutant SUBMIT JOB avant l'instruction. Exemple : SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Pour plus d'informations sur la soumission asynchrone des tâches, consultez la section Soumission asynchrone des tâches d'importation.
Par défaut, les fichiers exportés vers OSS contiennent uniquement les données et n'incluent pas les en-têtes de colonne. Pour exporter des fichiers avec des en-têtes de colonne, ajoutez l'indicateur /*+sql_output_oss_file_head_enable=true*/ avant l'instruction.
-
Insert select from
-
Description : Si vos données existent déjà dans une autre table, utilisez
INSERT SELECT FROMpour les copier vers une table externe. Cette instruction écrit les données de la table source vers l'emplacement OSS de la table externe. Chaque opération d'écriture génère de nouveaux fichiers de données OSS.ImportantVous devez écrire toutes les colonnes dans la table externe. Il est impossible de spécifier uniquement un sous-ensemble de colonnes.
Syntaxe :
INSERT INTO table_name SELECT select_statement FROM from_statement;Exemple :
insert into oss_table select col1, col2, col3 from source_table;
-
-
Insert overwrite select
-
Description : Utilisez
INSERT OVERWRITE SELECTpour effectuer une insertion en bloc dans une table. Si la table externe de destination contient déjà des données, cette instruction supprime d'abord tous les fichiers de données existants dans le chemin de la table externe, puis génère de nouveaux fichiers de données OSS.ImportantVous devez écrire toutes les colonnes dans la table externe. Il est impossible de spécifier uniquement un sous-ensemble de colonnes.
Syntaxe :
INSERT OVERWRITE table_name SELECT select_statement FROM from_statement;Exemple :
INSERT OVERWRITE oss_table SELECT col1, col2, col3 FROM source_table;
-
-
Replace select from
Description : Étant donné que les tables externes OSS ne prennent pas en charge les clés primaires,
REPLACE SELECT FROMse comporte de manière identique àINSERT SELECT FROM. Elle copie les données vers une autre table. Les données existantes dans la table de destination restent inchangées et les nouvelles données sont ajoutées sous forme de nouveaux fichiers de données OSS.
-
Exporter vers un seul fichier OSS (format CSV uniquement ; non pris en charge pour le format Parquet)
-
Description : Utilisez un indicateur pour exporter les données vers un seul fichier OSS spécifié. Si le mot-clé
OVERWRITEest inclus, tout fichier existant portant le même nom dans le répertoire défini dansTABLE_PROPERTIESde la table externe est écrasé. Les autres fichiers du répertoire ne sont pas affectés.ImportantVous devez écrire toutes les colonnes dans la table externe. Il est impossible de spécifier uniquement un sous-ensemble de colonnes.
Notes sur la version :
Pour les clusters AnalyticDB for MySQL antérieurs à la version 3.1.2 : Cette fonctionnalité n'est pas prise en charge. Le système génère automatiquement les noms de fichiers et exporte les données dans plusieurs fichiers. Le nombre de fichiers de destination est déterminé dynamiquement par la simultanéité des tâches.
Pour les clusters AnalyticDB for MySQL de version 3.1.2 et ultérieure, vous pouvez utiliser un indicateur pour exporter les tables externes régulières au format CSV AnalyticDB for MySQL vers un seul fichier dans OSS. Vous pouvez également personnaliser le nom du fichier lors de l'exportation. Sans indicateur, le comportement d'exportation est cohérent avec celui des versions antérieures à 3.1.2 : les données sont exportées vers plusieurs fichiers.
Syntaxe :
/*+output_filename=adb.txt*/INSERT [OVERWRITE] table_name SELECT select_statement FROM from_statement;Exemple :
/*+output_filename=adb.txt*/INSERT [OVERWRITE] oss_table SELECT * FROM source_table;
-
Syntaxe des tables externes partitionnées
Lorsque vous utilisez INSERT INTO ou INSERT OVERWRITE SELECT pour écrire des données, la tâche s'exécute par défaut de manière synchrone. Si vous écrivez un volume important de données, par exemple plusieurs centaines de gigaoctets, la connexion entre le client et le serveur AnalyticDB for MySQL peut expirer, ce qui entraîne l'échec de la tâche. Par conséquent, pour l'écriture de grands volumes de données, nous vous recommandons d'exécuter l'instruction INSERT OVERWRITE SELECT de manière asynchrone en ajoutant SUBMIT JOB avant l'instruction. Exemple : SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Pour plus d'informations sur la soumission asynchrone des tâches, consultez la section Soumission asynchrone des tâches d'importation.
Par défaut, les fichiers exportés vers OSS contiennent uniquement les données et n'incluent pas les en-têtes de colonne. Pour exporter des fichiers avec des en-têtes de colonne, ajoutez l'indicateur /*+sql_output_oss_file_head_enable=true*/ avant l'instruction.
Lorsque vous écrivez des données depuis une table partitionnée, les fichiers de données n'incluent pas les données des colonnes de clé de partition. Les informations de partition sont stockées dans la structure de répertoires OSS.
L'exportation des données d'une table externe partitionnée vers un seul fichier OSS n'est pas prise en charge.
Prenons l'exemple d'une table partitionnée comportant deux colonnes de clé de partition et trois colonnes régulières. La clé de partition de premier niveau est pcol1 avec la valeur 1 et la clé de partition de second niveau est pcol2 avec la valeur a. Les données de la table partitionnée sont exportées vers le chemin OSS adb_data/. Lorsque vous écrivez des données dans la partition où pcol1=1 et pcol2=a, le chemin relatif du fichier de données est adb_data/pcol1=1/pcol2=a/. Les fichiers de données CSV ou Parquet résultants ne contiennent pas les valeurs pour pcol1 et pcol2. Ils contiennent uniquement les valeurs des trois colonnes régulières.
Insert into partition select from
Fonction : La commande INSERT INTO PARTITION SELECT FROM insère des données en bloc dans une table externe partitionnée. Lors de l'écriture des données, vous pouvez utiliser la clause PARTITION pour spécifier toutes les colonnes de partition et leurs valeurs. Vous pouvez également spécifier uniquement les valeurs de partition de niveau supérieur et permettre la génération dynamique des partitions de niveau inférieur. Vous pouvez aussi omettre entièrement la clause PARTITION, ce qui génère dynamiquement tous les niveaux de partition.
Lors de l'écriture, les données sont ajoutées à la partition correspondante. Chaque opération d'écriture génère de nouveaux fichiers de données OSS.
Vous devez écrire toutes les colonnes dans la table externe. Il est impossible de spécifier uniquement un sous-ensemble de colonnes.
Partitions entièrement statiques
Syntaxe
INSERT INTO table_name PARTITION(par1=val1,par2=val2,...)
SELECT select_statement FROM from_statement;
Exemple
INSERT INTO oss_table_par PARTITION(par1=val1,par2=val2)
select col1, col2, col3 FROM source_table;
Partitions partiellement statiques et partiellement dynamiques
Syntaxe
INSERT INTO table_name PARTITION(par1=val1,par2,...)
SELECT select_statement FROM from_statement;
Exemple
INSERT INTO oss_table_par PARTITION(par1=val1,par2)
SELECT col1, col2, col3, par2col FROM source_table;
Partitions entièrement dynamiques
Syntaxe
INSERT INTO table_name
SELECT select_statement FROM from_statement;
Exemple
INSERT INTO oss_table_par
SELECT col1, col2, col3, par1col, par2col FROM source_table;
Insert overwrite partition select
Fonction : L'utilisation est identique à celle de INSERT INTO PARTITION SELECT. Toutefois, cette commande supprime également les fichiers de données existants des partitions cibles impliquées dans l'exécution. Les fichiers de données des partitions qui ne reçoivent pas de nouvelles données ne sont pas supprimés.
Syntaxe :
INSERT OVERWRITE table_name PARTITION(par1=val1,par2=val2,...)[IF NOT EXISTS]
SELECT select_statement FROM from_statement;
Exemple :
INSERT OVERWRITE oss_table_par PARTITION(par1=val1,par2=val2) IF NOT EXISTS
SELECT col1, col2, col3 FROM source_table;
Replace into partition select from
Description : Étant donné que les tables externes ne prennent pas en charge les clés primaires, REPLACE INTO PARTITION SELECT FROM se comporte de manière identique à INSERT INTO PARTITION SELECT FROM.
Syntaxe non prise en charge
Les tables externes AnalyticDB for MySQL ne prennent pas en charge la syntaxe d'écriture au niveau des lignes. Plus précisément, les instructions INSERT INTO VALUES et REPLACE INTO VALUES ne sont pas prises en charge.