AnalyticDB for MySQL は、外部テーブルを使用したデータのインポートとエクスポートをサポートしています。このトピックでは、AnalyticDB for MySQL の外部テーブルを使用して、ECS インスタンス上の自己管理型 MySQL データベースから AnalyticDB for MySQL Data Warehouse Edition クラスターにデータをインポートする方法について説明します。
前提条件
-
お使いの AnalyticDB for MySQL クラスターと同じリージョンおよび VPC に ECS インスタンスがあります。
-
ECS インスタンスにセルフマネージド MySQL データベースがインストールされていること。
-
ECS インスタンスのセキュリティグループにインバウンドルールを追加して、ポート 3306 でのセルフマネージド MySQL データベースへのアクセスを許可していること。詳細については、「セキュリティグループルールの追加」をご参照ください。
-
セルフマネージド MySQL データベースにデータベースを作成し、テストデータを準備済みであること。
この例では、
test_adbという名前のソースデータベースが作成され、データベースに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) ); AnalyticDB for MySQL クラスタがエラスティック モードの場合、クラスター情報 ページの ネットワーク情報 セクションで Eniネットワーク を有効にする必要があります。
重要ENI を有効または無効にすると、データベース接続が約 2 分間中断される場合があります。この間、読み取りまたは書き込み操作を実行することはできません。ENI を有効または無効にする場合は注意してください。
操作手順
AnalyticDB for MySQL クラスタに接続します。詳細については、「AnalyticDB for MySQL クラスタに接続する」をご参照ください。
データベースを作成します。詳細については、「データベースを作成する」をご参照ください。
この例では、
adb_demoという名前のデータベースが AnalyticDB for MySQL クラスタに作成されます。-
外部テーブルを作成します。
次のコマンドを実行して、ターゲットデータベース
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'外部テーブルのストレージエンジンを指定します。この例では MySQL を使用します。
TABLE_PROPERTIESAnalyticDB for MySQL が自己管理 MySQL データベースにアクセスするために使用する接続情報。
urlECS インスタンスの プライマリプライベート IP (VPC アドレス) およびソースデータベースの名前。 この例では、ソースデータベースは
test_adbです。 IP アドレスを表示するには:-
ECS コンソールにログインし、対象のインスタンスを見つけます。
-
インスタンスの詳細 ページの ネットワーク情報 セクションで、プライマリプライベート IP を表示します。
形式:
"jdbc:mysql://mysql-vpc-address:3306/ecs-database-name"。例:
jdbc:mysql://192.168.128.***:3306/test_adb。テーブル名自己管理型 MySQL データベースのソーステーブル名です。この例では、テーブル名は
goodsです。ユーザー名セルフマネージド MySQL インスタンスのソースデータベースにアクセスするためのユーザー名です。
パスワードアカウントのパスワードです。
文字セットMySQL データベースの文字セットです。有効値:
-
gbk
-
[Utf8] (デフォルト値)
-
utf8mb4
-
-
ターゲットテーブルを作成します。
次のコマンドを実行して、
adb_demoデータベースにmysql_import_testという名前のターゲットテーブルを作成します。このテーブルは、セルフマネージド 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); -
ECS インスタンス上の自己管理型 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;