RDS for MySQL から AnalyticDB for MySQL にデータをインポートして、複数のソースからのデータを統合し、AnalyticDB for MySQL で複雑なクエリ分析を実行できます。また、集計された主要なメトリックを RDS for MySQL に書き戻すこともできます。
前提条件
RDS for MySQL インスタンスと AnalyticDB for MySQL クラスターは同じ VPC 内にあります。
AnalyticDB for MySQL クラスターが存在する VPC の CIDR ブロックが、RDS for MySQL インスタンスのホワイトリストに追加されています。
AnalyticDB for MySQL Enterprise Edition、Basic Edition、Data Lakehouse Edition、または Data Warehouse Edition (Elastic Mode) クラスターの場合、AnalyticDB for MySQL コンソールの [クラスター情報] ページの [ネットワーク情報] セクションで [Elastic Network Interface (ENI) ネットワーク] スイッチが有効になっています。
重要ENI ネットワークを有効または無効にすると、データベース接続が約 2 分間中断されます。この期間中、読み取りおよび書き込み操作は利用できません。ENI ネットワークを有効または無効にする前に、影響を評価してください。
データ準備
この Topic の例では、RDS for MySQL データベース test_adb には、person という名前のテーブルが含まれています:
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)
);次の例では、person テーブルにデータを挿入します:
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');手順
Enterprise Edition、Basic Edition、および Data Lakehouse Edition
SQL エディターに移動します。
AnalyticDB for MySQL コンソールにログインします。コンソールの左上隅でリージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。管理するクラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
XIHE エンジンとインタラクティブなリソースグループを選択します。
次の文を実行して外部データベースを作成します。次のコードは例です:
CREATE EXTERNAL DATABASE adb_external_db;次の文を実行して外部テーブルを作成します。次のコードは例です:
説明AnalyticDB for MySQL の外部テーブルは、RDS for MySQL のソーステーブルと同じ列名、列数、列の順序、およびデータの型を持つ必要があります。
AnalyticDB for MySQL で外部テーブルを作成するためのパラメーターの詳細については、「CREATE EXTERNAL TABLE」をご参照ください。
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" }';データをクエリします。
外部テーブルが作成された後、AnalyticDB for MySQL で SELECT 文を実行して、RDS for MySQL の
goodsテーブルのデータをクエリできます。SELECT * FROM adb_external_db.goods;次の結果が返されます。
+----------+-------+-------+------------+---------------------+ | 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 | +----------+-------+-------+------------+---------------------+次の文を実行して、ターゲットデータベースを作成します。
CREATE DATABASE adb_demo;adb_demoデータベースにmysql_import_testという名前のターゲットテーブルを作成するには、次の文を実行します。このテーブルは、RDS for MySQL からインポートされたデータを格納するために使用されます。CREATE TABLE IF NOT EXISTS 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);次の文を実行して、RDS for MySQL インスタンスからターゲットの AnalyticDB for MySQL クラスターにデータをインポートします。
INSERT INTO mysql_import_test SELECT * FROM adb_external_db.goods;次の文を実行して、AnalyticDB for MySQL の
mysql_import_testテーブルのデータをクエリします。SELECT * FROM mysql_import_test;次の結果が返されます。
+----------+-------+-------+------------+---------------------+ | 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
ターゲットの AnalyticDB for MySQL クラスターに接続します。詳細については、「クラスターへの接続」をご参照ください。
ターゲットデータベースを作成します。詳細については、「データベースの作成」をご参照ください。
この例では、AnalyticDB for MySQL クラスターのターゲットデータベースの名前は
adb_demoです。外部テーブルを作成します。
次の文を実行して、ターゲットデータベース
adb_demoにgoods_external_tableという名前の外部テーブルを作成します。CREATE TABLE IF NOT EXISTS 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" }';パラメーター
説明
ENGINE='mysql'外部テーブルのストレージエンジン。この Topic では MySQL を使用します。
TABLE_PROPERTIESAnalyticDB for MySQL は、このメソッドを使用して RDS for MySQL のデータにアクセスします。
urlRDS for MySQL インスタンスの内部エンドポイント (VPC エンドポイント) とソースデータベースの名前。この例では、ソースデータベースは
test_adbです。RDS for MySQL インスタンスのエンドポイントを表示する方法の詳細については、「内部およびパブリックエンドポイントとポートの表示または変更」をご参照ください。フォーマット:
"jdbc:mysql://mysql-vpc-address:3306/rds-database-name"。例:
jdbc:mysql://rm-bp1hem632****.mysql.rds.aliyuncs.com:3306/test_adb。tablenameRDS for MySQL のソーステーブルの名前。この例では、ソーステーブルは
goodsです。usernameRDS for MySQL インスタンスのデータベースアカウント。
passwordRDS for MySQL データベースアカウントのパスワード。
charsetMySQL の文字セット。有効な値:
gbk
utf8 (デフォルト)
utf8mb4
ターゲットテーブルを作成します。
adb_demoターゲットデータベースで、次の文を実行してmysql_import_testという名前のテーブルを作成します。このテーブルは、RDS for MySQL からインポートされたデータを格納するために使用されます。CREATE TABLE IF NOT EXISTS 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);ソースの RDS for MySQL インスタンスから AnalyticDB for MySQL クラスターにデータをインポートします。
REPLACE INTO mysql_import_test SELECT * FROM goods_external_table;インポートが完了したら、AnalyticDB for MySQL のターゲットデータベース
adb_demoにログインし、次のコマンドを実行して、ソーステーブルのデータがmysql_import_testテーブルにインポートされたことを確認できます:SELECT * FROM mysql_import_test LIMIT 100;このコマンドは次の出力を返します:
+----------+-------+-------+------------+---------------------+ | 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 | +----------+-------+-------+------------+---------------------+