Tous les produits
Search
Centre de documentation

AnalyticDB:Exporter des données vers HDFS

Dernière mise à jour :Aug 10, 2026

AnalyticDB for MySQL Data Warehouse Edition (V3.0) utilise des tables externes pour transférer des données entre AnalyticDB for MySQL et des systèmes de stockage externes. Cette rubrique explique comment exporter des données d'un cluster AnalyticDB for MySQL vers Apsara File Storage for HDFS à l'aide de tables externes.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster AnalyticDB for MySQL exécutant la version mineure 3.1.4.4 ou ultérieure.

    Pour vérifier la version mineure de votre cluster, consultez la rubrique Comment interroger la version d'un cluster AnalyticDB for MySQL ? Pour mettre à niveau la version mineure, contactez le support technique.
  • Un cluster Apsara File Storage for HDFS avec un dossier de destination pour les données exportées. Cet exemple utilise un dossier nommé hdfs_output_test_csv_data.

    L'instruction INSERT OVERWRITE supprime tous les fichiers existants dans le dossier de destination avant d'écrire les nouvelles données. Pour éviter toute perte accidentelle de données, créez un nouveau dossier de destination pour chaque tâche d'exportation au lieu de réutiliser un dossier existant.
  • Les ports d'accès aux services suivants sont configurés dans le cluster Apsara File Storage for HDFS pour autoriser l'accès depuis AnalyticDB for MySQL :

    Nœud Objectif Port par défaut Paramètre de configuration Référence
    NameNode Lecture et écriture des métadonnées du système de fichiers 8020 fs.defaultFS core-default.xml
    DataNode Lecture et écriture des données 50010 dfs.datanode.address hdfs-default.xml
  • Pour les clusters en mode élastique : ENI activé sur la page Cluster Information sous Network Information. Turn on ENI

Notes d'utilisation

  • Seuls les fichiers CSV et Parquet peuvent être exportés. Le format ORC n'est pas pris en charge.

  • Les instructions INSERT INTO VALUES et REPLACE INTO VALUES ne sont pas prises en charge pour les tables externes. Utilisez plutôt INSERT INTO ... SELECT ou REPLACE INTO ... SELECT.

  • Toutes les colonnes de la table externe doivent être incluses dans l'exportation. L'exportation d'un sous-ensemble de colonnes n'est pas prise en charge.

  • Les tables externes partitionnées ne peuvent pas exporter des fichiers individuels ; les données sont toujours distribuées dans les répertoires de partition.

  • Les valeurs des colonnes de partition sont stockées sous forme de noms de répertoire HDFS, et non en tant que colonnes dans les fichiers de données exportés. Par exemple, si vous exportez vers adb_data/ avec les colonnes de partition p1=1 et p2=a, les données sont placées dans adb_data/p1=1/p2=a/. Le fichier CSV ou Parquet exporté contient uniquement les colonnes non partitionnées.

Exporter des données vers Apsara File Storage for HDFS

Étape 1 : Se connecter au cluster AnalyticDB for MySQL

Connectez-vous au cluster. Pour plus de détails, consultez la rubrique Connexion à un cluster AnalyticDB for MySQL.

Étape 2 : Créer une base de données source et une table

Cet exemple utilise une base de données nommée adb_demo comme source.

  1. Créez la base de données source. Pour plus de détails, consultez la rubrique Créer une base de données.

  2. Créez une table source nommée adb_hdfs_import_source dans adb_demo :

    CREATE TABLE IF NOT EXISTS adb_hdfs_import_source
    (
        uid string,
        other string
    )
    DISTRIBUTED BY HASH(uid);
  3. Insérez des données de test :

    INSERT INTO adb_hdfs_import_source VALUES ("1", "a"), ("2", "b"), ("3", "c");

Étape 3 : Créer une table externe

Créez une table externe dans adb_demo qui mappe le dossier de destination dans Apsara File Storage for HDFS. AnalyticDB for MySQL prend en charge deux types de tables externes : standard et partitionnée.

Table externe standard

Une table externe standard exporte toutes les données dans un seul répertoire sans sous-répertoires de partition. Les exemples suivants montrent comment créer une table externe standard pour les formats CSV et Parquet.

Format CSV :

CREATE TABLE IF NOT EXISTS hdfs_import_external
(
    uid string,
    other string
)
ENGINE='HDFS'
TABLE_PROPERTIES='{
    "format":"csv",
    "delimiter":",",
    "hdfs_url":"hdfs://172.17.***.***:9000/adb/hdfs_output_test_csv_data"
}';

Format Parquet :

CREATE TABLE IF NOT EXISTS hdfs_import_external
(
    uid string,
    other string
)
ENGINE='HDFS'
TABLE_PROPERTIES='{
    "format":"parquet",
    "hdfs_url":"hdfs://172.17.***.***:9000/adb/hdfs_output_test_csv_data"
}';

Table externe partitionnée

Une table externe partitionnée organise les données exportées dans des sous-répertoires de partition en fonction des valeurs des colonnes de partition. Définissez à la fois les colonnes ordinaires (telles que uid et other) et les colonnes de partition (telles que p1, p2 et p3) dans l'instruction CREATE TABLE.

CREATE TABLE IF NOT EXISTS hdfs_import_external_par
(
    uid string,
    other string,
    p1 date,
    p2 int,
    p3 varchar
)
ENGINE='HDFS'
TABLE_PROPERTIES='{
    "format":"csv",
    "delimiter":",",
    "hdfs_url":"hdfs://172.17.***.***:9000/adb/hdfs_output_test_csv_data",
    "partition_column":"p1, p2, p3"
}';

Pour la syntaxe complète, consultez les sections Créer une table externe Apsara File Storage for HDFS et Créer une table externe partitionnée Apsara File Storage for HDFS de la rubrique Utiliser des tables externes pour importer des données dans Data Warehouse Edition.

Étape 4 : Exporter des données

Utilisez l'une des méthodes d'exportation décrites dans les annexes pour exécuter une tâche d'exportation :

Étapes suivantes

Une fois l'exportation terminée, vérifiez les données de l'une des deux manières suivantes :

  • Utilisez le client Hadoop pour parcourir le dossier de destination hdfs_output_test_csv_data.

  • Interrogez les données exportées depuis AnalyticDB for MySQL via la table externe. La syntaxe de requête est identique pour les tables externes standard et partitionnées :

    SELECT * FROM hdfs_import_external LIMIT 100;

Annexe 1 : Méthodes d'exportation pour les tables externes standard

Les tables externes standard prennent en charge quatre méthodes d'exportation. Toutes les méthodes exigent que chaque colonne de la table externe soit incluse dans l'instruction SELECT.

Méthode Instruction Comportement
Ajout INSERT INTO Ajoute un nouveau fichier au répertoire de destination. Les fichiers existants ne sont pas écrasés.
Ajout (équivalent) REPLACE INTO Comportement identique à INSERT INTO pour les tables externes. Les tables externes n'ayant pas de clés primaires, il n'y a pas de déduplication.
Écrasement INSERT OVERWRITE Supprime tous les fichiers existants dans le répertoire de destination, puis écrit les nouvelles données. À utiliser avec précaution.
Écrasement asynchrone SUBMIT JOB INSERT OVERWRITE Identique à l'écrasement, mais s'exécute de manière asynchrone. Renvoie un ID de tâche pour le suivi de l'état.

INSERT INTO

Chaque exécution ajoute un nouveau fichier au répertoire de destination HDFS sans supprimer les fichiers existants.

Syntaxe :

INSERT INTO <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

INSERT INTO hdfs_import_external
SELECT col1, col2, col3 FROM adb_hdfs_import_source;
col1, col2, col3 représentent toutes les colonnes de la table externe.

REPLACE INTO

Équivalent à INSERT INTO pour les tables externes HDFS. Les tables externes n'ayant pas de clés primaires, REPLACE INTO ajoute un nouveau fichier au répertoire de destination au lieu de remplacer les lignes.

Syntaxe :

REPLACE INTO <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

REPLACE INTO hdfs_import_external
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

INSERT OVERWRITE

Supprime tous les fichiers du répertoire de destination avant d'écrire les nouvelles données.

Important

Cette opération ne peut pas être annulée. Tous les fichiers existants dans le chemin de la table externe sont définitivement supprimés.

Syntaxe :

INSERT OVERWRITE <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

INSERT OVERWRITE hdfs_import_external
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

SUBMIT JOB INSERT OVERWRITE (asynchrone)

Exécute l'exportation par écrasement de manière asynchrone et renvoie immédiatement un ID de tâche. Utilisez cette méthode pour les exportations volumineuses qui bloqueraient autrement la session.

Syntaxe :

SUBMIT JOB INSERT OVERWRITE <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

SUBMIT JOB INSERT OVERWRITE hdfs_import_external
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

L'ID de tâche renvoyé identifie la tâche asynchrone :

+---------------------------------------+
| job_id                                |
+---------------------------------------+
| 2020112122202917203100908203303****** |
+---------------------------------------+

Pour vérifier l'état de la tâche, consultez la rubrique Soumettre une tâche d'importation de manière asynchrone.

Annexe 2 : Méthodes d'exportation pour les tables externes partitionnées

Lors de l'utilisation d'une table externe partitionnée, incluez une clause PARTITION dans l'instruction pour spécifier les valeurs des colonnes de partition. Les valeurs de partition peuvent être entièrement statiques, statiques-dynamiques ou entièrement dynamiques.

Toutes les méthodes exigent que chaque colonne non partitionnée de la table externe soit incluse dans l'instruction SELECT.

Méthode Instruction Comportement
Ajout INSERT INTO PARTITION Ajoute un nouveau fichier au répertoire de partition correspondant. Les fichiers existants ne sont pas écrasés.
Ajout (équivalent) REPLACE INTO PARTITION Comportement identique à INSERT INTO PARTITION pour les tables externes.
Écrasement INSERT OVERWRITE PARTITION Écrase les données existantes uniquement dans les répertoires de partition spécifiés. Les partitions non concernées restent inchangées.
Écrasement asynchrone SUBMIT JOB INSERT OVERWRITE Identique à l'écrasement, mais s'exécute de manière asynchrone.

INSERT INTO PARTITION

Chaque exécution ajoute un nouveau fichier au répertoire de partition correspondant.

Partition entièrement statique — toutes les valeurs de partition sont spécifiées explicitement :

INSERT INTO <target_table> PARTITION(par1=val1, par2=val2, ...)
SELECT <col_name> FROM <source_table>;

Exemple :

INSERT INTO hdfs_import_external_par PARTITION(p1='2021-05-06', p2=1, p3='test')
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

Partition statique-dynamique — certaines valeurs de partition sont statiques, tandis que d'autres sont dérivées du résultat de la requête :

Les colonnes de partition statiques doivent apparaître avant les colonnes de partition dynamiques dans la clause PARTITION .
INSERT INTO <target_table> PARTITION(par1=val1, par2, ...)
SELECT <col_name> FROM <source_table>;

Exemple :

INSERT INTO hdfs_import_external_par PARTITION(p1='2021-05-27', p2, p3)
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

Partition entièrement dynamique — les valeurs de partition sont dérivées du résultat de la requête ; aucune clause PARTITION n'est nécessaire :

INSERT INTO <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

INSERT INTO hdfs_import_external_par
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

REPLACE INTO PARTITION

Équivalent à INSERT INTO PARTITION pour les tables externes HDFS. Les tables externes n'ayant pas de clés primaires, REPLACE INTO PARTITION ajoute un nouveau fichier au lieu de remplacer les lignes.

Partition entièrement statique :

REPLACE INTO <target_table> PARTITION(par1=val1, par2=val2, ...)
SELECT <col_name> FROM <source_table>;

Exemple :

REPLACE INTO hdfs_import_external_par PARTITION(p1='2021-05-06', p2=1, p3='test')
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

Partition statique-dynamique :

Les colonnes de partition statiques doivent apparaître avant les colonnes de partition dynamiques dans la clause PARTITION .
REPLACE INTO <target_table> PARTITION(par1=val1, par2, ...)
SELECT <col_name> FROM <source_table>;

Exemple :

REPLACE INTO hdfs_import_external_par PARTITION(p1='2021-05-06', p2, p3)
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

Partition entièrement dynamique :

REPLACE INTO <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

REPLACE INTO hdfs_import_external_par
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

INSERT OVERWRITE PARTITION

Écrase les données existantes dans les répertoires de partition spécifiés. Les partitions non couvertes par l'instruction ne sont pas affectées. La clause optionnelle IF NOT EXISTS ignore les partitions contenant déjà des données.

Important

Cette opération ne peut pas être annulée. Les données existantes dans les partitions ciblées sont définitivement supprimées.

Syntaxe :

INSERT OVERWRITE <target_table> PARTITION(par1=val1, par2=val2, ...) [IF NOT EXISTS]
SELECT <col_name> FROM <source_table>;

Exemple :

INSERT OVERWRITE hdfs_import_external_par PARTITION(p1='2021-05-06', p2=1, p3='test') IF NOT EXISTS
SELECT col1, col2, col3 FROM adb_hdfs_import_source;
IF NOT EXISTS empêche l'écriture de données dans une partition qui contient déjà des données, laissant son contenu existant intact.

SUBMIT JOB INSERT OVERWRITE (asynchrone)

Exécute l'exportation par écrasement de partition de manière asynchrone et renvoie immédiatement un ID de tâche.

Syntaxe :

SUBMIT JOB INSERT OVERWRITE <target_table>
SELECT <col_name> FROM <source_table>;

Exemple :

SUBMIT JOB INSERT OVERWRITE hdfs_import_external_par PARTITION(p1='2021-05-06', p2=1, p3='test') IF NOT EXISTS
SELECT col1, col2, col3 FROM adb_hdfs_import_source;

L'ID de tâche renvoyé identifie la tâche asynchrone :

+---------------------------------------+
| job_id                                |
+---------------------------------------+
| 2020112122202917203100908203303****** |
+---------------------------------------+

Pour vérifier l'état de la tâche, consultez la rubrique Soumettre une tâche d'importation de manière asynchrone.