AnalyticDB for MySQL では、外部テーブルを用いたデータのインポートおよびエクスポートがサポートされています。本トピックでは、ECS インスタンス上で動作する自己管理 MySQL データベースから、AnalyticDB for MySQL の AnalyticDB for MySQL Data Warehouse Edition クラスターへデータをインポートする手順について説明します。
前提条件
-
ご利用の AnalyticDB for MySQL クラスターと同じリージョンおよび VPC 内に ECS インスタンスが存在すること。
-
ECS インスタンス上に自己管理 MySQL データベースがインストール済みであること。
-
自己管理 MySQL データベースのポート 3306 に対して、セキュリティグループのインバウンドルールが追加済みであること。詳細については、「セキュリティグループルールの追加」をご参照ください。
-
自己管理 MySQL データベース上にデータベースが作成され、テストデータが準備済みであること。
本例では、ソースデータベースとして
test_adbという名前の自己管理 MySQL データベースを使用します。このデータベース内には、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 クラスターへの接続」をご参照ください。
-
データベースを作成します。詳細については、「データベースを作成する」をご参照ください。
本例では、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’外部テーブルのストレージエンジンです。本例では MySQL を使用します。
TABLE_PROPERTIESAnalyticDB for MySQL クラスターが自己管理 MySQL データベースにアクセスするために使用する接続情報です。
urlプライマリプライベート IP アドレス(VPC アドレス)およびソースデータベースの名前です。本例では、ソースデータベースは
test_adbです。IP アドレスの確認手順は以下のとおりです:-
ECS コンソール にログインし、対象のインスタンスを検索します。
-
インスタンスの詳細 タブの プライマリプライベート IP アドレス を、ネットワーク情報 セクションより確認します。
フォーマット:
"jdbc:mysql://mysql-vpc-address:3306/ecs-database-name"。例:
jdbc:mysql://192.168.128.***:3306/test_adb。tablename自己管理 MySQL データベース内のソーステーブルの名前です。本例では
goodsを使用します。usernameソースの自己管理 MySQL データベースにアクセスするためのアカウントです。
passwordアカウントのパスワードです。
charsetMySQL データベースの文字セットです。有効な値は以下のとおりです:
-
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); -
ソースの自己管理 MySQL データベースから送信先の AnalyticDB for MySQL クラスターへデータをインポートします。
REPLACE INTO mysql_import_test SELECT * FROM goods_external_table;
次のステップ
データのインポートが完了した後、adb_demo データベースに AnalyticDB for MySQL クラスターから接続し、以下の文を実行して、ソーステーブルから mysql_import_test テーブルへデータが正しくインポートされたかを確認できます:
SELECT * FROM mysql_import_test LIMIT 100;