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

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

最終更新日:Sep 06, 2024

このトピックでは、AnalyticDB for MySQLでApsaraDB RDS for MySQLデータを読み書きする方法について説明します。

前提条件

  • AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。

  • ApsaraDB RDS for MySQLインスタンスは、AnalyticDB for MySQLクラスターと同じ仮想プライベートクラウド (VPC) に作成されています。

  • Elastic Network Interface (ENI) は、AnalyticDB for MySQLコンソールの [クラスター情報] ページの [ネットワーク情報] セクションでオンになっています。

  • AnalyticDB for MySQLクラスターのVPC CIDRブロックが、ApsaraDB RDS for MySQLインスタンスのIPアドレスホワイトリストに追加されます。 詳細については、「IPアドレスホワイトリストの設定」をご参照ください。

サンプルデータ

この例では、ApsaraDB RDS for MySQLインスタンスのtest_adbデータベースにpersonという名前のテーブルが作成されています。

test_adb.personが存在しない場合は

CREATE TABLE IF NOT EXISTS test_adb.person(
id int,
name varchar(1023),
age int
);

データはpersonテーブルに挿入されます。

INSERT INTO test_adb.person values
(1, 'james', 10),
(2, 'bond', 20),
(3, 'jack', 30),
(4, 'lucy', 40);

手順

  1. SQLエディターに移動します。

    1. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。   [Data Lakehouse Edition] タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

    2. 左側のナビゲーションウィンドウで、ジョブ开発 > Sql開発.

  2. XIHEエンジンと対話型リソースグループを選択します。

  3. 次のステートメントを実行して、外部データベースを作成します。

    CREATE EXTERNAL DATABASE adb_external_db;
  4. 次のステートメントを実行して、外部テーブルを作成します。

    説明
    • AnalyticDB for MySQL外部テーブルは、ApsaraDB RDS for MySQLテーブルと同じフィールドの名前、数量、順序、およびデータタイプを持つ必要があります。

    • AnalyticDB for MySQL外部テーブルの作成に使用されるパラメーターについては、「create external table」をご参照ください。

    adb_external_db.personが存在しない場合は

    CREATE EXTERNAL TABLE IF NOT EXISTS  adb_external_db.person (
        id int,
        name varchar(1023),
        age int
     )ENGINE = 'MYSQL' TABLE_PROPERTIES = '{
       "url":"jdbc:mysql://mysql-address:3306/test_adb",
       "tablename":"person",
       "username":"mysql-user-name",
       "password":"mysql-user-password",
       "charset":"utf8"
    }';
  5. データの照会

    外部テーブルの作成後、AnalyticDB for MySQLクラスターでSELECTステートメントを実行して、ApsaraDB RDS for MySQLインスタンスのpersonテーブルのデータを照会できます。

    SELECT * FROM adb_external_db.person;

    サンプル結果:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lucy  |   40 |
    +------+-------+------+
    4 rows in set (0.35 sec)
  6. 次のステートメントを実行して、ApsaraDB RDS for MySQLテーブルにデータを書き込みます。

    INSERT INTO adb_external_db.person SELECT 5, 'lily', 20;
  7. 次のステートメントを実行して、adb_demoという名前のターゲットデータベースを作成します。

    CREATE DATABASE adb_demo;
  8. 次のステートメントを実行して、adb_demoデータベースにmysql_import_testという名前のターゲットテーブルを作成します。 ターゲットテーブルは、ApsaraDB RDS for MySQLインスタンスからインポートされたデータを格納するために使用されます。

    CREATE TABLE IF NOT EXISTS  mysql_import_test (
        id int,
        name varchar(1023),
        age int,
       PRIMARY KEY (id)
     )
    DISTRIBUTED BY HASH(id);
  9. 次のステートメントを実行して、ApsaraDB RDS for MySQLインスタンスからAnalyticDB for MySQLクラスターにデータをインポートします。

    INSERT INTO mysql_import_test
    SELECT * FROM adb_external_db.person;
  10. 次のステートメントを実行して、AnalyticDB for MySQLクラスターのmysql_import_testテーブルのデータを照会します。

    SELECT * FROM mysql_import_test;

    サンプル結果:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    4 | lucy  |   40 |
    |    5 | lily  |   20 |
    |    3 | jack  |   30 |
    +------+-------+------+
    5 rows in set (0.37 sec)