Tous les produits
Search
Centre de documentation

AnalyticDB:Import MaxCompute data by using external tables

Dernière mise à jour :Aug 10, 2026

Pour interroger directement les données MaxCompute depuis AnalyticDB for MySQL ou les charger dans des tables internes afin d'optimiser les performances analytiques, les tables externes permettent d'effectuer ces deux opérations sans déplacer les données au préalable. Cette rubrique explique comment créer des tables externes MaxCompute et les utiliser pour importer des données dans AnalyticDB for MySQL.

Cas d'utilisation des tables externes

Les tables externes sont des mappages virtuels en lecture seule vers les tables sources MaxCompute. Utilisez-les lorsque :

  • Vous souhaitez exécuter des requêtes ponctuelles sur les données MaxCompute sans les copier au préalable.

  • Vous souhaitez utiliser INSERT ... SELECT pour copier les données MaxCompute dans les tables internes d'AnalyticDB for MySQL.

Pour les imports récurrents à grande échelle nécessitant une isolation stricte, privilégiez la méthode d'import élastique décrite dans cette rubrique (nécessite Milvus V3.1.10.0 ou version ultérieure, ainsi qu'un groupe de ressources de tâche).

Les tables externes ne remplacent pas d'autres méthodes d'import, telles que Data Transmission Service (DTS) ou le chargement par lots basé sur OSS, lorsque ces dernières sont mieux adaptées à votre pipeline de données.

Méthodes d'accès selon l'édition

Edition Méthode d'accès Version du noyau Débit
Enterprise Edition, Basic Edition, Data Lakehouse Edition API Tunnel Record Aucune limite Adapté aux imports à petite échelle. Débit plus faible.
API Tunnel Arrow V3.2.2.3 ou ultérieure Lit les données en colonnes, ce qui réduit le temps d'import. Débit plus élevé.
Data Warehouse Edition API Tunnel Record Aucune limite Utilise un groupe de ressources public partagé Data Transmission Service. Débit plus faible.

Prérequis

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

  • Un projet MaxCompute et un cluster AnalyticDB for MySQL situés dans la même région. Consultez la rubrique Créer un cluster.

  • Le bloc CIDR du Virtual Private Cloud (VPC) du cluster AnalyticDB for MySQL ajouté à la liste d'autorisation du projet MaxCompute. Consultez la rubrique Gérer les listes d'autorisation IP. Pour trouver le bloc CIDR : connectez-vous à la console AnalyticDB for MySQL et notez l'ID VPC sur la page Cluster Information. Connectez-vous ensuite à la console VPC et recherchez le bloc CIDR correspondant à ce VPC.

  • Pour les clusters Enterprise Edition, Basic Edition et Data Lakehouse Edition :

    • Accès via une interface réseau élastique (ENI) activé. Dans la console, accédez à Cluster Management > Cluster Information > Network Information et activez l'interrupteur d'accès ENI.

      Important

      L'activation ou la désactivation de l'accès ENI interrompt les connexions à la base de données pendant environ 2 minutes. Aucune opération de lecture ou d'écriture n'est possible durant cette période. Évaluez l'impact avant d'effectuer cette modification.

    • (API Tunnel Arrow uniquement) Version du noyau du cluster V3.2.2.3 ou ultérieure. Pour afficher et mettre à jour la version mineure, accédez à la section Configuration Information de la page Cluster Information.

  • L'AccessKey ID et l'AccessKey Secret d'un compte Alibaba Cloud ou d'un utilisateur Resource Access Management (RAM) disposant des autorisations de lecture sur le projet MaxCompute.

Exemple de données

Les exemples suivants utilisent le projet MaxCompute odps_project et la table odps_nopart_import_test :

-- Create the source table in MaxCompute
CREATE TABLE IF NOT EXISTS odps_nopart_import_test (
    id int,
    name string,
    age int)
PARTITIONED BY (dt string);

-- Add a partition
ALTER TABLE odps_nopart_import_test
ADD PARTITION (dt='202207');

-- Insert sample data
INSERT INTO odps_project.odps_nopart_import_test
PARTITION (dt='202207')
VALUES (1,'james',10),(2,'bond',20),(3,'jack',30),(4,'lucy',40);

Importer des données à l'aide de l'API Tunnel Record

L'API Tunnel Record prend en charge deux méthodes d'import : l'import standard (par défaut) et l'import élastique.

Méthode Fonctionnement Cas d'utilisation
Import standard Lit les données sources sur les nœuds de calcul et construit les index sur les nœuds de stockage. Consomme à la fois des ressources de calcul et de stockage. Utilisation générale ; aucun groupe de ressources supplémentaire requis.
Import élastique Lit les données sources et construit les index au sein d'une tâche Serverless Spark exécutée dans un groupe de ressources de tâche. Vous souhaitez minimiser l'impact sur les lectures et écritures en temps réel et améliorer l'isolation des ressources. Nécessite Milvus V3.1.10.0 ou version ultérieure, ainsi qu'un groupe de ressources de tâche configuré.

Import standard

  1. Ouvrez l'éditeur SQL. Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters, recherchez et cliquez sur l'ID du cluster, puis choisissez Job Development > SQL Development.

  2. Créez une base de données externe.

    CREATE EXTERNAL DATABASE adb_external_db;
  3. Créez une table externe mappée à la table source MaxCompute.

    Remarque
    • Les colonnes de la table externe doivent correspondre exactement à celles de la table source MaxCompute : mêmes noms de champs, même nombre de champs, même ordre des champs et types de données compatibles. Pour tous les paramètres TABLE_PROPERTIES , consultez la rubrique CREATE EXTERNAL TABLE.

    Paramètre Description
    ENGINE='ODPS' Spécifie MaxCompute comme moteur de stockage.
    endpoint Le point de terminaison VPC de MaxCompute. Seuls les points de terminaison VPC sont pris en charge. Consultez la rubrique Points de terminaison VPC pour obtenir les points de terminaison par région.
    accessid L'AccessKey ID disposant des autorisations de lecture sur le projet MaxCompute.
    accesskey L'AccessKey Secret correspondant à l'AccessKey ID.
    partition_column Le nom de la colonne de partition. Omettez ce paramètre si la table source MaxCompute n'est pas partitionnée.
    project_name Le nom de l'espace de travail MaxCompute.
    table_name Le nom de la table source dans MaxCompute.
    CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_db.test_adb (
        id int,
        name varchar(1023),
        age int,
        dt string
    ) ENGINE='ODPS'
    TABLE_PROPERTIES='{
    "accessid":"yourAccessKeyID",
    "endpoint":"http://service.cn-hangzhou.maxcompute.aliyun.com/api",
    "accesskey":"yourAccessKeySecret",
    "partition_column":"dt",
    "project_name":"odps_project",
    "table_name":"odps_nopart_import_test"
    }';

    Paramètres clés :

  4. Vérifiez la table externe en interrogeant les données.

    SELECT * FROM adb_external_db.test_adb;

    Résultat attendu :

    +------+-------+------+---------+
    | id   | name  | age  |   dt    |
    +------+-------+------+---------+
    |    1 | james |   10 |  202207 |
    |    2 | bond  |   20 |  202207 |
    |    3 | jack  |   30 |  202207 |
    |    4 | lucy  |   40 |  202207 |
    +------+-------+------+---------+
  5. Créez une base de données et une table de destination dans AnalyticDB for MySQL.

    Remarque

    La table de destination et la table externe doivent présenter le même ordre de champs et le même nombre de champs, avec des types de données compatibles.

    CREATE DATABASE adb_demo;
    CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(
        id int,
        name string,
        age int,
        dt string,
        PRIMARY KEY(id,dt)
    )
    DISTRIBUTED BY HASH(id)
    PARTITION BY VALUE('dt');
  6. Importez les données. Choisissez l'une des méthodes suivantes :

    • **Méthode 1 — INSERT INTO :** importe les données et ignore les lignes dont les clés primaires sont dupliquées (équivalent à INSERT IGNORE INTO). Consultez la rubrique INSERT INTO.

      INSERT INTO adb_demo.adb_import_test
      SELECT * FROM adb_external_db.test_adb;

      Pour importer uniquement à partir d'une partition spécifique :

      INSERT INTO adb_demo.adb_import_test
      SELECT * FROM adb_external_db.test_adb
      WHERE dt = '202207';
    • **Méthode 2 — INSERT OVERWRITE INTO :** écrase toutes les données existantes dans la table de destination.

      INSERT OVERWRITE INTO adb_demo.adb_import_test
      SELECT * FROM adb_external_db.test_adb;
    • **Méthode 3 — INSERT OVERWRITE INTO asynchrone :** soumet l'import en tant que tâche en arrière-plan. Ajoutez l'indicateur /*+ direct_batch_load=true*/ pour accélérer la tâche. Consultez la rubrique Écritures asynchrones.

      SUBMIT JOB
      INSERT OVERWRITE INTO adb_demo.adb_import_test
      SELECT * FROM adb_external_db.test_adb;

      La commande renvoie un ID de tâche :

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

      Utilisez l'ID de tâche pour surveiller ou annuler la tâche. Consultez la rubrique Soumettre une tâche d'import asynchrone.

Import élastique

L'import élastique exécute l'import au sein d'une tâche Serverless Spark, réduisant ainsi l'impact sur les charges de travail en temps réel. Cette fonctionnalité nécessite Milvus V3.1.10.0 ou version ultérieure, ainsi qu'un groupe de ressources de tâche configuré.

Important

L'import élastique prend uniquement en charge INSERT OVERWRITE INTO. Vous ne pouvez pas utiliser INSERT INTO avec l'import élastique.

  1. Ouvrez l'éditeur SQL. Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters, recherchez et cliquez sur l'ID du cluster, puis choisissez Job Development > SQL Development.

  2. Créez une base de données (ignorez cette étape si elle existe déjà).

    CREATE DATABASE adb_demo;
  3. Créez une table externe.

    Remarque
    • Le nom de la table externe doit correspondre au nom du projet MaxCompute. Sinon, la création de la table externe échoue.

    • L'import élastique nécessite la création de tables externes avec CREATE TABLE (et non CREATE EXTERNAL TABLE).

    • Les colonnes de la table externe doivent correspondre exactement à celles de la table source MaxCompute : mêmes noms de champs, même nombre de champs, même ordre des champs et mêmes types de données.

    CREATE TABLE IF NOT EXISTS test_adb
    (
        id int,
        name string,
        age int,
        dt string
    )
    ENGINE='ODPS'
    TABLE_PROPERTIES='{
    "endpoint":"http://service.cn-hangzhou.maxcompute.aliyun-inc.com/api",
    "accessid":"yourAccessKeyID",
    "accesskey":"yourAccessKeySecret",
    "partition_column":"dt",
    "project_name":"odps_project",
    "table_name":"odps_nopart_import_test"
    }';

    Pour obtenir les descriptions des paramètres TABLE_PROPERTIES , consultez la rubrique Descriptions des paramètres.

  4. Vérifiez la table externe en interrogeant les données.

    SELECT * FROM adb_demo.test_adb;
  5. Créez la table de destination dans AnalyticDB for MySQL.

    Remarque

    La table de destination et la table externe doivent avoir les mêmes noms de champs, le même nombre de champs, le même ordre des champs et les mêmes types de données.

    CREATE TABLE IF NOT EXISTS adb_import_test
    (
        id int,
        name string,
        age int,
        dt string,
        PRIMARY KEY(id,dt)
    )
    DISTRIBUTED BY HASH(id)
    PARTITION BY VALUE('dt') LIFECYCLE 30;
  6. Importez les données à l'aide de l'une des méthodes suivantes. Les deux méthodes utilisent les paramètres d'indicateur elastic_load et elastic_load_configs pour activer et configurer la tâche d'import élastique. Définissez elastic_load sur true pour activer l'import élastique (valeur par défaut : false). Utilisez elastic_load_configs pour spécifier les paramètres de configuration entre crochets [ ] ; séparez plusieurs paramètres par | . Le paramètre elastic_load_configs accepte les paramètres suivants :

    • Méthode 1 — Import élastique synchrone :

      /*+ elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/
      INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.test_adb;
    • Méthode 2 — Import élastique asynchrone :

      Important

      Les files d'attente de priorité ne sont pas prises en charge pour les tâches d'import élastique asynchrone.

      /*+ elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/
      SUBMIT JOB INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.test_adb;

      La commande renvoie un ID de tâche. Utilisez-le pour surveiller ou annuler la tâche. Consultez la rubrique Soumettre une tâche d'import asynchrone.

    Paramètre Obligatoire Description
    adb.load.resource.group.name Oui Nom du groupe de ressources de tâche qui exécute la tâche d'import élastique.
    adb.load.job.max.acu Non Ressources maximales allouées à la tâche d'import élastique. Unité : unités de calcul AnalyticDB (ACU). Minimum : 5 ACU. Par défaut : nombre de shards plus 1. Pour interroger le nombre de shards : SELECT count(1) FROM information_schema.kepler_meta_shards;
    spark.driver.resourceSpec Non Type de ressource du pilote Spark. Par défaut : small . Consultez la colonne Type dans le tableau des spécifications des ressources Spark .
    spark.executor.resourceSpec Non Type de ressource de l'exécuteur Spark. Par défaut : large . Consultez la colonne Type dans le tableau des spécifications des ressources Spark .
    spark.adb.executorDiskSize Non Capacité disque de l'exécuteur Spark. Valeurs valides : (0, 100]. Unité : Go. Par défaut : 10 Go. Consultez la rubrique Spécifier les ressources du pilote et de l'exécuteur .
  7. (Facultatif) Vérifiez que la tâche s'est exécutée en tant que tâche d'import élastique.

    SELECT job_name, (job_type = 3) AS is_elastic_load
    FROM INFORMATION_SCHEMA.kepler_meta_async_jobs
    WHERE job_name = "2023081818010602101701907303151******";

    Résultat attendu :

    +---------------------------------------+------------------+
    | job_name                              | is_elastic_load  |
    +---------------------------------------+------------------+
    | 2023081517195203101701907203151****** |       1          |
    +---------------------------------------+------------------+

    La valeur is_elastic_load = 1 indique une tâche d'import élastique. La valeur is_elastic_load = 0 indique une tâche d'import standard.

Importer des données à l'aide de l'API Tunnel Arrow

L'API Tunnel Arrow lit les données MaxCompute en colonnes, ce qui réduit le volume de transfert de données et accélère les imports. Cette fonctionnalité nécessite la version V3.2.2.3 ou ultérieure du noyau du cluster.

Étape 1 : Activer l'API Arrow

Activez l'API Arrow au niveau du cluster à l'aide de SET ADB_CONFIG , ou au niveau de la requête à l'aide d'un indicateur.

  • Niveau du cluster (persiste entre les requêtes) :

    SET ADB_CONFIG <config_name>= <value>;
  • Niveau de la requête (s'applique à une seule requête) :

    /*<config_name>= <value>*/ SELECT * FROM table;

Paramètres de configuration de l'API Arrow :

Paramètre Description
ODPS_TUNNEL_ARROW_ENABLED Active l'API Arrow. Valeurs valides : true (activé), false (désactivé, par défaut).
ODPS_TUNNEL_SPLIT_BY_SIZE_ENABLED Active le fractionnement dynamique. Valeurs valides : true (activé), false (désactivé, par défaut).

Étape 2 : Importer des données MaxCompute

Une fois l'API Arrow activée, les étapes d'import sont identiques à celles de l'import standard. Suivez les étapes 1 à 6 de la section Import standard .

Le cluster utilise automatiquement l'API Tunnel Arrow pour toutes les opérations d'accès et d'import de données MaxCompute ultérieures.

Importer des données (Data Warehouse Edition)

Data Warehouse Edition utilise l'API Tunnel Record avec un groupe de ressources public partagé Data Transmission Service.

  1. Se connecter au cluster AnalyticDB for MySQL .

  2. Créez la base de données de destination.

    CREATE DATABASE test_adb;
  3. Créez une table externe MaxCompute. Cet exemple utilise odps_nopart_import_test_external_table .

    Paramètre Description
    ENGINE='ODPS' Spécifie MaxCompute comme moteur de stockage.
    endpoint Le point de terminaison VPC de MaxCompute. Seuls les points de terminaison VPC sont pris en charge. Consultez la rubrique Points de terminaison VPC pour obtenir les points de terminaison par région.
    accessid L'AccessKey ID d'un compte Alibaba Cloud ou d'un utilisateur RAM disposant des autorisations d'accès à MaxCompute. Consultez la rubrique Comptes et autorisations .
    accesskey L'AccessKey Secret correspondant à l'AccessKey ID. Consultez la rubrique Comptes et autorisations .
    partition_column Le nom de la colonne de partition. Omettez ce paramètre si la table source MaxCompute n'est pas partitionnée.
    project_name Le nom de l'espace de travail MaxCompute.
    table_name Le nom de la table source dans MaxCompute.
    CREATE TABLE IF NOT EXISTS odps_nopart_import_test_external_table
    (
        id int,
        name string,
        age int,
        dt string
    )
    ENGINE='ODPS'
    TABLE_PROPERTIES='{
    "endpoint":"http://service.cn.maxcompute.aliyun-inc.com/api",
    "accessid":"yourAccessKeyID",
    "accesskey":"yourAccessKeySecret",
    "partition_column":"dt",
    "project_name":"odps_project1",
    "table_name":"odps_nopart_import_test"
    }';
  4. Créez la table de destination dans AnalyticDB for MySQL.

    CREATE TABLE IF NOT EXISTS adb_nopart_import_test
    (
        id int,
        name string,
        age int,
        dt string,
        PRIMARY KEY(id,dt)
    )
    DISTRIBUTED BY HASH(id)
    PARTITION BY VALUE('dt') LIFECYCLE 30;
  5. Importez les données. Choisissez l'une des méthodes suivantes :

    • **Méthode 1 — INSERT INTO :** ignore les lignes dont les clés primaires sont dupliquées (équivalent à INSERT IGNORE INTO ). Consultez la rubrique INSERT INTO .

      INSERT INTO adb_nopart_import_test
      SELECT * FROM odps_nopart_import_test_external_table;

      Pour vérifier les données importées :

      SELECT * FROM adb_nopart_import_test;

      Résultat attendu :

      +------+-------+------+---------+
      | id   | name  | age  |   dt    |
      +------+-------+------+---------+
      |    1 | james |   10 |  202207 |
      |    2 | bond  |   20 |  202207 |
      |    3 | jack  |   30 |  202207 |
      |    4 | lucy  |   40 |  202207 |
      +------+-------+------+---------+

      Pour importer uniquement à partir d'une partition spécifique :

      INSERT INTO adb_nopart_import_test
      SELECT * FROM odps_nopart_import_test_external_table
      WHERE dt = '202207';
    • **Méthode 2 — INSERT OVERWRITE :** écrase toutes les données existantes dans la table de destination.

      INSERT OVERWRITE adb_nopart_import_test
      SELECT * FROM odps_nopart_import_test_external_table;
    • **Méthode 3 — INSERT OVERWRITE asynchrone :** soumet l'import en tant que tâche en arrière-plan. Consultez la rubrique Écriture asynchrone .

      SUBMIT JOB
      INSERT OVERWRITE adb_nopart_import_test
      SELECT * FROM odps_nopart_import_test_external_table;

      La commande renvoie un ID de tâche. Utilisez-le pour surveiller ou annuler la tâche. Consultez la rubrique Soumettre une tâche d'import asynchrone .

Rubriques connexes