すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:外部テーブルを使用してデータをdata Warehouse Editionにインポートする

最終更新日:Jun 11, 2024

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テーブルを作成します。

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データへのアクセスとインポート

  1. AnalyticDB for MySQLクラスターに接続します。 詳細については、「AnalyticDB For MySQLクラスターへの接続」をご参照ください。

  2. データベースを作成します。

    CREATEデータベースtest_adb;
  3. 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テーブルの名前。

  4. MaxComputeからインポートされたデータを保存するために、test_adbデータベースにadb_nopart_import_testという名前のテーブルを作成します。

    が存在しない場合はテーブルを作成します。adb_nopart_import_test
    (id int,
        名前文字列,
        age int,
        dtストリング、
        主要なキー (id、dt)
    )
    ハッシュによる分配 (id)
    値によるパーティション ('dt') LIFECYCLE 30; 
  5. データをインポートする。

    • 方法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 ****** | 

      ジョブを非同期で送信する方法については、「インポートジョブを非同期で送信」をご参照ください。