AnalyticDB for MySQLでは、外部テーブルを使用してMaxComputeデータにアクセスし、インポートできます。 これにより、クラスターリソースの利用率が最大化され、データインポートのパフォーマンスが向上します。 このトピックでは、外部テーブルを使用してMaxComputeからAnalyticDB for MySQL data Warehouse Edition (V3.0) にデータをインポートする方法について説明します。
前提条件
MaxComputeプロジェクトとAnalyticDB for MySQLクラスターが同じリージョンに作成されます。 詳細については、「クラスターの作成」をご参照ください。
AnalyticDB for MySQLクラスターが配置されている仮想プライベートクラウド (VPC) のCIDRブロックがMaxComputeプロジェクトのホワイトリストに追加されます。
AnalyticDB for MySQLコンソールにログインして、[クラスター情報] ページでVPC IDを表示できます。 次に、VPCコンソールにログインし、VPCページでVPC IDを見つけてCIDRブロックを表示します。 MaxComputeホワイトリストの設定方法については、「IPアドレスホワイトリストの管理」をご参照ください。
サンプルデータ
この例では、odps_project1
という名前のMaxComputeプロジェクトとodps_nopart_import_test
という名前のMaxComputeテーブルが使用されています。 次のステートメントを実行して、odps_nopart_import_testテーブルを作成します。
テーブルを作成します (
id int,
名前文字列,
年齢int)
によって分割 (dt文字列);
次のステートメントを実行して、odps_nopart_import_test
テーブルにパーティションを作成します。
ALTER TABLE odps_nopart_import_test
追加
パーティー (dt='202207');
次のステートメントを実行して、パーティションにデータを挿入します。
への挿入
PARTITION (dt='202207')
値 (1、「james」、10) 、(2、「bond」、20) 、(3、「jack」、30) 、(4、「lucy」、40);
トンネルモードでのMaxComputeデータへのアクセスとインポート
AnalyticDB for MySQLクラスターに接続します。 詳細については、「AnalyticDB For MySQLクラスターへの接続」をご参照ください。
データベースを作成します。
CREATEデータベースtest_adb;
MaxCompute外部テーブルを作成します。 この例では、
odps_nopart_import_test_external_table
という名前の外部テーブルが使用されています。存在しない場合はテーブルを作成する ( id int, 名前文字列, age int, dtストリング ) エンジン='ODPS' TABLE_PROPERTIES='{ "endpoint":" http://service.cn.maxcompute.aliyun-inc.com/api " 、 "accessid":"L ******** FsE" 、 "accesskey":"CcwF ******** iWjv" 、 "partition_column":"dt" 、 "project_name":"odps_project1" 、 "table_name":"odps_nopart_import_test" }';
パラメーター
説明
エンジン='ODPS'
外部テーブルのストレージエンジン。 MaxComputeデータを読み書きするには、ストレージエンジンをODPSに設定します。
エンドポイント
MaxComputeプロジェクトのエンドポイント。
説明AnalyticDB for MySQLは、VPCエンドポイントを使用してのみMaxComputeにアクセスできます。
各リージョンのVPCエンドポイントの詳細については、「エンドポイント」トピックの「異なるリージョンのエンドポイント (VPC) 」をご参照ください。
accessid
MaxComputeへのアクセスに使用されるAlibaba CloudアカウントまたはRAM (Resource Access Management) ユーザーのAccessKey ID。
AccessKey IDとAccessKeyシークレットの取得方法については、「アカウントと権限」をご参照ください。
accesskey
MaxComputeへのアクセスに使用されるAlibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット。
AccessKey IDとAccessKeyシークレットの取得方法については、「アカウントと権限」をご参照ください。
partition_column
パーティション列。 パーティションテーブルを作成するには、
partition_column
パラメーターが必要です。 パーティション分割されていないMaxComputeテーブルを作成するには、partition_column
パラメーターを設定する必要はありませんが、AnalyticDB for MySQLでパーティションなしのテーブルを作成する必要があります。project_name
MaxCompute プロジェクトの名前を設定します。
table_name
MaxComputeテーブルの名前。
MaxComputeからインポートされたデータを保存するために、
test_adb
データベースにadb_nopart_import_test
という名前のテーブルを作成します。が存在しない場合はテーブルを作成します。adb_nopart_import_test (id int, 名前文字列, age int, dtストリング、 主要なキー (id、dt) ) ハッシュによる分配 (id) 値によるパーティション ('dt') LIFECYCLE 30;
データをインポートする。
方法1:
INSERT INTO
ステートメントを実行してデータをインポートします。 主キーの値が重複している場合、データは繰り返し挿入されず、INSERT INTOステートメントはINSERT IGNORE INTO
ステートメントと同等です。 詳細については、「INSERT INTO」をご参照ください。adb_nopart_import_testに挿入 SELECT * からodps_nopart_import_test_external_table;
SELECTステートメントを実行して、テーブルに書き込まれたデータを照会します。 例:
SELECT * からadb_nopart_import_test;
サンプル結果:
+ ------ ------ ------- ------------- | id | name | 年齢 | dt | ------ ------ -------- -------------- | 1 | ジェームズ | 10 | 202207 | | 2 | ボンド | 20 | 202207 | | 3 | ジャック | 30 | 202207 | | 4 | ルーシー | 40 | 202207 | + ----- ------ -------- -------------
特定のパーティションから
adb_nopart_import_test
テーブルにデータをインポートする場合は、次のステートメントを実行します。adb_nopart_import_testに挿入 SELECT * からodps_nopart_import_test_external_table WHERE dt='20220';
方法2:
INSERT OVERWRITE
ステートメントを実行してデータをインポートします。 主キーの値が重複している場合、元の値は新しい値で上書きされます。 例:INSERT OVERWRITE adb_nopart_import_test SELECT * からodps_nopart_import_test_external_table;
方法3:
INSERT OVERWRITE
ステートメントを実行して、データを非同期的にインポートします。 ほとんどの場合、SUBMIT JOB
ステートメントは非同期ジョブの送信に使用されます。 ジョブを高速化するために、データインポートステートメントの前にヒントを追加できます。 詳細については、「INSERT OVERWRITE SELECT」トピックの「非同期書き込み」セクションをご参照ください。 例:ジョブを送信 INSERT OVERWRITE adb_nopart_import_test SELECT * からodps_nopart_import_test_external_table;
サンプル結果:
+ --------------------------------------- + | job_id | + --------------------------------------- + | 2020112122202917203100908203303 ****** |
ジョブを非同期で送信する方法については、「インポートジョブを非同期で送信」をご参照ください。