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 ... SELECTpour 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.
ImportantL'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
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.
-
Créez une base de données externe.
CREATE EXTERNAL DATABASE adb_external_db; -
Créez une table externe mappée à la table source MaxCompute.
RemarqueLes 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. endpointLe 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. accessidL'AccessKey ID disposant des autorisations de lecture sur le projet MaxCompute. accesskeyL'AccessKey Secret correspondant à l'AccessKey ID. partition_columnLe nom de la colonne de partition. Omettez ce paramètre si la table source MaxCompute n'est pas partitionnée. project_nameLe nom de l'espace de travail MaxCompute. table_nameLe 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 :
-
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 | +------+-------+------+---------+ -
Créez une base de données et une table de destination dans AnalyticDB for MySQL.
RemarqueLa 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'); -
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 INTOasynchrone :** 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é.
L'import élastique prend uniquement en charge INSERT OVERWRITE INTO. Vous ne pouvez pas utiliser INSERT INTO avec l'import élastique.
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.
-
Créez une base de données (ignorez cette étape si elle existe déjà).
CREATE DATABASE adb_demo; -
Créez une table externe.
RemarqueLe 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 nonCREATE 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. -
Vérifiez la table externe en interrogeant les données.
SELECT * FROM adb_demo.test_adb; -
Créez la table de destination dans AnalyticDB for MySQL.
RemarqueLa 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; -
Importez les données à l'aide de l'une des méthodes suivantes. Les deux méthodes utilisent les paramètres d'indicateur
elastic_loadetelastic_load_configspour activer et configurer la tâche d'import élastique. Définissezelastic_loadsurtruepour activer l'import élastique (valeur par défaut :false). Utilisezelastic_load_configspour spécifier les paramètres de configuration entre crochets[ ]; séparez plusieurs paramètres par|. Le paramètreelastic_load_configsaccepte 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 :
ImportantLes 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.nameOui Nom du groupe de ressources de tâche qui exécute la tâche d'import élastique. adb.load.job.max.acuNon 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.resourceSpecNon 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.resourceSpecNon 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.executorDiskSizeNon 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 . -
-
(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 = 1indique une tâche d'import élastique. La valeuris_elastic_load = 0indique 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.
-
Créez la base de données de destination.
CREATE DATABASE test_adb; -
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. endpointLe 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. accessidL'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 . accesskeyL'AccessKey Secret correspondant à l'AccessKey ID. Consultez la rubrique Comptes et autorisations . partition_columnLe nom de la colonne de partition. Omettez ce paramètre si la table source MaxCompute n'est pas partitionnée. project_nameLe nom de l'espace de travail MaxCompute. table_nameLe 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" }'; -
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; -
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 OVERWRITEasynchrone :** 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 .
-