本記事では、Data Integration のデータ統合専用リソースグループを使用して、Elastic Compute Service (ECS) インスタンス上の自己管理 MySQL データベースから MaxCompute にデータを移行する方法について説明します。
前提条件
-
VPC にバインドされた ECS インスタンスが少なくとも 1 つ必要です。 クラシックネットワークは使用しないでください。 また、インスタンスには MySQL データベースがインストールされており、ユーザーとテストデータが準備されている必要があります。 この例では、次の文を使用して自己管理 MySQL データベースのテストデータを作成します。
CREATE TABLE IF NOT EXISTS good_sale( create_time timestamp, category varchar(20), brand varchar(20), buyer_id varchar(20), trans_num varchar(20), trans_amount DOUBLE, click_cnt varchar(20) ); insert into good_sale values('2018-08-21','coat','brandA','tanaka',3,500.6,7), ('2018-08-22','food','brandB','tanaka',1,303,8), ('2018-08-22','coat','brandC','suzuki',2,510,2), ('2018-08-22','bath','brandA','suzuki',1,442.5,1), ('2018-08-22','food','brandD','suzuki',2,234,3), ('2018-08-23','coat','brandB','sato',9,2000,7), ('2018-08-23','food','brandA','sato',5,45.1,5), ('2018-08-23','coat','brandE','sato',5,100.2,4), ('2018-08-24','food','brandG','ito',10,5560,7), ('2018-08-24','bath','brandF','ito',1,445.6,2), ('2018-08-24','coat','brandA','watanabe',3,777,3), ('2018-08-24','bath','brandG','watanabe',3,122,3), ('2018-08-24','coat','brandC','watanabe',1,62,7) ; -
ご利用の ECS インスタンスの プライベート IP アドレス、VPC、および vSwitch をメモしておきます。
-
ECS インスタンスのセキュリティグループを設定し、デフォルトの MySQL ポート 3306 でのインバウンドトラフィックを許可します。 詳細については、「セキュリティグループルールの追加」をご参照ください。 ご利用のセキュリティグループ名をメモしておきます。
-
DataWorks ワークスペースを作成します。 この例では、MaxCompute をコンピュートエンジンとして使用する基本モードの DataWorks ワークスペースを使用します。 ECS インスタンスと DataWorks ワークスペースが同じリージョンにあることを確認してください。 ワークスペースの作成方法については、「ワークスペースの作成」をご参照ください。
-
Data Integration のデータ統合専用リソースグループを購入し、ECS インスタンスが存在する VPC にバインドします。 データ統合専用リソースグループは、ECS インスタンスと同じゾーンにある必要があります。 詳細については、「Data Integration のデータ統合専用リソースグループの使用」をご参照ください。 バインドが完了すると、リソースグループ でデータ統合専用リソースグループを確認できます。
-
セクションで、VPC、スイッチ、および セキュリティグループ の情報が ECS の情報と一致しているか確認します。
-
MaxCompute データソースを追加します。 詳細については、「MaxCompute 計算リソースの関連付け」をご参照ください。
背景情報
Data Integration のデータ統合専用リソースグループは、高速で安定したデータ転送を保証します。 ご購入いただくデータ統合専用リソースグループ、アクセス対象のデータソース (本記事では ECS インスタンス上の自己管理 MySQL データベース)、および DataWorks ワークスペースは、同じリージョンにある必要があります。 さらに、リソースグループと ECS インスタンスは同じゾーンにある必要があります。
操作手順
-
DataWorks で MySQL データソースを作成します。
DataWorks コンソールにログインします。 対象リージョンで、左側のナビゲーションウィンドウの をクリックします。 ドロップダウンリストからワークスペースを選択し、入力 管理センター をクリックします。
ワークスペース管理ページで、左側のナビゲーションウィンドウにある [データソース] をクリックして、データソースページを開きます。
-
Add Data Source をクリックします。
-
Add Data Source ダイアログボックスで、[MySQL] をクリックします。
-
[MySQL データソースの作成] ダイアログボックスで、パラメーターを設定します。 詳細については、「MySQL データソースの設定」をご参照ください。
この例では、User-created Data Store with Public IP Addresses を使用します。 Connection Address には、ECS インスタンスのプライベート IP アドレスとデフォルトの MySQL ポート番号 3306 を入力します。
説明VPC 内の自己管理 MySQL データソースでは、Test Connectivity 機能はサポートされていません。 この段階で接続テストが失敗するのは想定内の動作です。
-
必要なリソースグループの Test Connectivity をクリックします。
Data Integration のデータ統合専用リソースグループを使用してデータを同期できます。 各タスクでは 1 つのリソースグループしか使用できません。 複数のリソースグループが利用可能な場合は、使用したい各リソースグループの接続性をテストする必要があります。 これにより、同期タスクに使用されるリソースグループがデータソースに接続できることが保証されます。 そうしないと、データ同期タスクは失敗します。 詳細については、「ネットワーク接続ソリューション」をご参照ください。
-
接続テストに成功したら、Finish をクリックします。
-
MaxCompute テーブルを作成します。
MySQL からのテストデータを受け取るために、DataWorks にテーブルを作成する必要があります。
-
左上隅の
アイコンをクリックし、 を選択します。 -
Workflow を作成します。 詳細については、「スケジュールされたワークフローの作成」をご参照ください。
-
新しいワークフローを右クリックし、 を選択します。
-
MaxCompute テーブルの名前を入力します。 この例では、MySQL ソーステーブルと同じ名前の
good_saleを使用します。 [DDL] をクリックし、DDL 文を入力してから、Generate Table Schema をクリックします。この例では、次の DDL 文を使用します。 データの型の変換にご注意ください。
CREATE TABLE IF NOT EXISTS good_sale( create_time string, category STRING, brand STRING, buyer_id STRING, trans_num BIGINT, trans_amount DOUBLE, click_cnt BIGINT ); -
テーブルの Display Name を入力し、Commit to Production Environment をクリックして、MaxCompute に
good_saleテーブルを作成します。
-
-
Data Integration タスクを設定します。
-
ワークフローを右クリックし、 を選択して、Data Integration タスクを作成します。
-
追加した MySQL データソースをソースとして選択し、MaxCompute データソースを送信先として選択します。 Conversion script をクリックして、Data Integration タスクをスクリプトモードに切り替えます。
この時点でエラーが発生したり、データソースから Table を選択できなかったりすることがありますが、これは正常な動作です。 ツールバーの
スクリプト変換をクリックして、スクリプトモードに切り替えます。 -
右側のペインで Resource Group configuration をクリックし、購入したデータ統合専用リソースグループを選択します。
タスクを Data Integration のデータ統合専用リソースグループに切り替えないと、タスクは失敗します。
-
Data Integration タスクに次のスクリプトを入力します。
{ "type": "job", "steps": [ { "stepType": "mysql", "parameter": { "column": [// ソース列名 "create_time", "category", "brand", "buyer_id", "trans_num", "trans_amount", "click_cnt" ], "connection": [ { "datasource": "shuai",// ソースデータソース "table": [ "good_sale"// ソースデータベースのテーブル名。角括弧で囲んだ配列にする必要があります。 ] } ], "where": "", "splitPk": "", "encoding": "UTF-8" }, "name": "Reader", "category": "reader" }, { "stepType": "odps", "parameter": { "partition": "", "truncate": true, "datasource": "odps_source",// 送信先 MaxCompute データソース名 "column": [// 送信先列名 "create_time", "category", "brand", "buyer_id", "trans_num", "trans_amount", "click_cnt" ], "emptyAsNull": false, "table": "good_sale"// 送信先テーブル名 }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "0" }, "speed": { "throttle": false, "concurrent": 2 } } } -
[実行] をクリックします。 ページ下部の Operational Logs を確認して、データが MaxCompute に転送されたことを確認できます。
-
結果
ODPS SQL ノードを作成して、MaxCompute テーブル内のデータをクエリできます。
クエリ文 select * from good_sale; を入力し、Running をクリックします。 クエリが完了すると、結果に MaxCompute テーブルに転送されたデータが表示されます。