Les tables externes permettent à AnalyticDB for MySQL de lire directement les données d'une instance RDS for MySQL via votre réseau privé virtuel (VPC). Cette approche vous permet d'extraire les données sources vers AnalyticDB for MySQL pour réaliser des analyses complexes, puis d'écrire éventuellement les résultats agrégés dans RDS for MySQL.
Prérequis
Avant de commencer, assurez-vous que :
L'instance RDS for MySQL et le cluster AnalyticDB for MySQL se trouvent dans le même VPC.
Le bloc CIDR du VPC où réside le cluster AnalyticDB for MySQL est ajouté à la liste d'autorisation IP de l'instance RDS for MySQL. Sans cette configuration, AnalyticDB for MySQL ne peut pas atteindre l'instance RDS for MySQL et les requêtes adressées à la table externe échouent.
Pour les clusters Enterprise Edition, Basic Edition, Data Lakehouse Edition ou Data Warehouse Edition en mode élastique : activez l'interrupteur ENI dans la section Network Information de la page Cluster Information de la console AnalyticDB for MySQL.
L'activation ou la désactivation de l'interface réseau élastique (ENI) interrompt la connectivité à la base de données pendant environ deux minutes, période durant laquelle les opérations de lecture et d'écriture sont indisponibles. Planifiez cette modification lors d'une fenêtre de maintenance.
Exemple de données
Les exemples de cette rubrique utilisent une base de données RDS for MySQL nommée test_adb qui contient une table goods :
CREATE TABLE goods (
goods_id bigint(20) NOT NULL,
price double NOT NULL,
class bigint(20) NOT NULL,
name varchar(32) NOT NULL,
update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (goods_id)
);
Insérez des lignes d'exemple à utiliser tout au long des étapes :
INSERT INTO test_adb.goods
VALUES
(1, 50, 1, 'Book', '2024-08-07 09:56:53'),
(2, 80, 2, 'Basketball', '2024-08-08 10:00:55'),
(3, 150, 3, 'Watch', '2024-08-06 11:00:25'),
(4, 30, 1, 'Magazine', '2024-08-08 12:25:55'),
(5, 80, 2, 'Football', '2024-08-07 08:50:35'),
(6, 25, 4, 'Tea', '2024-08-05 09:25:30'),
(7, 30, 4, 'Coffee', '2024-08-07 10:20:40'),
(8, 300, 3, 'Computer', '2024-08-06 10:55:35'),
(9, 100, 2, 'Baseball', '2024-08-08 11:35:50'),
(10, 200, 3, 'Phone', '2024-08-07 11:30:25');
Importation des données
Les étapes diffèrent selon l'édition de votre cluster.
Enterprise Edition, Basic Edition et Data Lakehouse Edition
Steps overview: Ouvrez l'éditeur SQL → Créez une base de données externe → Créez une table externe → Interrogez la table externe → Créez une table de destination → Importez les données → Vérifiez.
-
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, puis cliquez sur l'ID de votre cluster.
Dans le volet de navigation de gauche, cliquez sur Job Development > SQL Development.
Sélectionnez le moteur XIHE et un groupe de ressources interactif.
-
Créez une base de données externe.
CREATE EXTERNAL DATABASE adb_external_db; -
Créez une table externe qui mappe la table
goodsdans RDS for MySQL.La table externe dans AnalyticDB for MySQL doit avoir les mêmes noms de colonnes, nombre de colonnes, ordre des colonnes et types de données que la table source dans RDS for MySQL.
ImportantÉvitez d'intégrer des identifiants en dur dans les instructions SQL que vous enregistrez ou partagez. Stockez les identifiants de manière sécurisée et substituez-les au moment de l'exécution lorsque cela est possible.
Espace réservé Description <mysql-address>Le nom d'hôte du point de terminaison interne (VPC) de votre instance RDS for MySQL. Format : <hostname>:3306. Pour trouver votre point de terminaison, consultez Afficher ou modifier les points de terminaison et ports internes et publics.<mysql-user-name>Le compte de base de données pour l'instance RDS for MySQL. <mysql-user-password>Le mot de passe du compte de base de données. Paramètre Description urlLe point de terminaison VPC de l'instance RDS for MySQL et le nom de la base de données source. Format : "jdbc:mysql://<hostname>:3306/<database-name>".tablenameLe nom de la table source dans RDS for MySQL. usernameLe compte de base de données pour l'instance RDS for MySQL. passwordLe mot de passe du compte de base de données. charsetLe jeu de caractères. Valeurs valides : gbk,utf8(par défaut),utf8mb4.CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_db.goods ( goods_id bigint(20) NOT NULL, price double NOT NULL, class bigint(20) NOT NULL, name varchar(32) NOT NULL, update_time timestamp, PRIMARY KEY (goods_id) ) ENGINE = 'MYSQL' TABLE_PROPERTIES = '{ "url":"jdbc:mysql://<mysql-address>:3306/test_adb", "tablename":"goods", "username":"<mysql-user-name>", "password":"<mysql-user-password>", "charset":"utf8" }';Remplacez les espaces réservés suivants. Paramètres clés dans
TABLE_PROPERTIES: Pour la syntaxe complète deCREATE EXTERNAL TABLE, consultez CREATE EXTERNAL TABLE. -
Vérifiez la table externe en interrogeant les données RDS for MySQL via AnalyticDB for MySQL.
SELECT * FROM adb_external_db.goods;Sortie attendue :
+----------+-------+-------+------------+---------------------+ | goods_id | price | class | name | update_time | +----------+-------+-------+------------+---------------------+ | 2 | 80.0 | 2 | Basketball | 2024-08-08 10:00:55 | | 10 | 200.0 | 3 | Phone | 2024-08-07 11:30:25 | | 1 | 50.0 | 1 | Book | 2024-08-07 09:56:53 | | 6 | 25.0 | 4 | Tea | 2024-08-05 09:25:30 | | 9 | 100.0 | 2 | Baseball | 2024-08-08 11:35:50 | | 3 | 150.0 | 3 | Watch | 2024-08-06 11:00:25 | | 5 | 80.0 | 2 | Football | 2024-08-07 08:50:35 | | 7 | 30.0 | 4 | Coffee | 2024-08-07 10:20:40 | | 8 | 300.0 | 3 | Computer | 2024-08-06 10:55:35 | | 4 | 30.0 | 1 | Magazine | 2024-08-08 12:25:55 | +----------+-------+-------+------------+---------------------+ -
Créez une base de données et une table de destination dans AnalyticDB for MySQL pour stocker les données importées.
CREATE DATABASE adb_demo;CREATE TABLE IF NOT EXISTS adb_demo.mysql_import_test ( goods_id bigint(20) NOT NULL, price double NOT NULL, class bigint(20) NOT NULL, name varchar(32) NOT NULL, update_time timestamp, PRIMARY KEY (goods_id) ) DISTRIBUTED BY HASH(goods_id); -
Importez les données de la table externe vers la table de destination.
INSERT INTO adb_demo.mysql_import_test SELECT * FROM adb_external_db.goods; -
Vérifiez l'importation.
SELECT * FROM adb_demo.mysql_import_test;Sortie attendue :
+----------+-------+-------+------------+---------------------+ | goods_id | price | class | name | update_time | +----------+-------+-------+------------+---------------------+ | 2 | 80.0 | 2 | Basketball | 2024-08-08 10:00:55 | | 10 | 200.0 | 3 | Phone | 2024-08-07 11:30:25 | | 1 | 50.0 | 1 | Book | 2024-08-07 09:56:53 | | 6 | 25.0 | 4 | Tea | 2024-08-05 09:25:30 | | 9 | 100.0 | 2 | Baseball | 2024-08-08 11:35:50 | | 3 | 150.0 | 3 | Watch | 2024-08-06 11:00:25 | | 5 | 80.0 | 2 | Football | 2024-08-07 08:50:35 | | 7 | 30.0 | 4 | Coffee | 2024-08-07 10:20:40 | | 8 | 300.0 | 3 | Computer | 2024-08-06 10:55:35 | | 4 | 30.0 | 1 | Magazine | 2024-08-08 12:25:55 | +----------+-------+-------+------------+---------------------+
Data Warehouse Edition
Steps overview: Connectez-vous au cluster → Créez une base de données de destination → Créez une table externe → Créez une table de destination → Importez les données → Vérifiez.
Connectez-vous au cluster AnalyticDB for MySQL. Pour plus de détails, consultez Connexion à un cluster.
Créez une base de données de destination. Pour plus de détails, consultez Création d'une base de données. Dans cet exemple, la base de données de destination est nommée
adb_demo.-
Créez une table externe dans
adb_demoqui mappe la tablegoodsdans RDS for MySQL.ImportantÉvitez d'intégrer des identifiants en dur dans les instructions SQL que vous enregistrez ou partagez. Stockez les identifiants de manière sécurisée et substituez-les au moment de l'exécution lorsque cela est possible.
Paramètre Description ENGINE='mysql'Spécifie MySQL comme moteur de stockage pour la table externe. TABLE_PROPERTIESUn objet JSON qui définit la manière dont AnalyticDB for MySQL se connecte à RDS for MySQL. urlLe point de terminaison VPC de l'instance RDS for MySQL et le nom de la base de données source. Format : "jdbc:mysql://<hostname>:3306/<database-name>". Pour trouver votre point de terminaison, consultez Afficher ou modifier les points de terminaison et ports internes et publics.tablenameLe nom de la table source dans RDS for MySQL. usernameLe compte de base de données pour l'instance RDS for MySQL. passwordLe mot de passe du compte de base de données. charsetLe jeu de caractères. Valeurs valides : gbk,utf8(par défaut),utf8mb4.CREATE TABLE IF NOT EXISTS adb_demo.goods_external_table ( goods_id bigint(20) NOT NULL, price double NOT NULL, class bigint(20) NOT NULL, name varchar(32) NOT NULL, update_time timestamp, PRIMARY KEY (goods_id) ) ENGINE='mysql' TABLE_PROPERTIES='{ "url":"jdbc:mysql://<mysql-vpc-address>:3306/test_adb", "tablename":"goods", "username":"<mysql-user-name>", "password":"<mysql-user-password>", "charset":"utf8" }';Paramètres clés :
-
Créez une table de destination pour stocker les données importées.
CREATE TABLE IF NOT EXISTS adb_demo.mysql_import_test ( goods_id bigint(20) NOT NULL, price double NOT NULL, class bigint(20) NOT NULL, name varchar(32) NOT NULL, update_time timestamp, PRIMARY KEY (goods_id) ) DISTRIBUTED BY HASH(goods_id); -
Importez les données de la table externe vers la table de destination.
REPLACE INTO adb_demo.mysql_import_test SELECT * FROM adb_demo.goods_external_table; -
Vérifiez l'importation.
SELECT * FROM adb_demo.mysql_import_test LIMIT 100;Sortie attendue :
+----------+-------+-------+------------+---------------------+ | goods_id | price | class | name | update_time | +----------+-------+-------+------------+---------------------+ | 2 | 80.0 | 2 | Basketball | 2024-08-08 10:00:55 | | 10 | 200.0 | 3 | Phone | 2024-08-07 11:30:25 | | 1 | 50.0 | 1 | Book | 2024-08-07 09:56:53 | | 6 | 25.0 | 4 | Tea | 2024-08-05 09:25:30 | | 9 | 100.0 | 2 | Baseball | 2024-08-08 11:35:50 | | 3 | 150.0 | 3 | Watch | 2024-08-06 11:00:25 | | 5 | 80.0 | 2 | Football | 2024-08-07 08:50:35 | | 7 | 30.0 | 4 | Coffee | 2024-08-07 10:20:40 | | 8 | 300.0 | 3 | Computer | 2024-08-06 10:55:35 | | 4 | 30.0 | 1 | Magazine | 2024-08-08 12:25:55 | +----------+-------+-------+------------+---------------------+
Étapes suivantes
Pour écrire les résultats dans RDS for MySQL, créez une table externe pointant vers la table RDS cible et utilisez
INSERT INTO ... SELECTpour pousser les données d'AnalyticDB for MySQL vers RDS for MySQL.Pour la référence DDL complète des tables externes, consultez CREATE EXTERNAL TABLE.