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

AnalyticDB:Data Lakehouse Edition にデータをインポートする方法

最終更新日:Apr 29, 2025

このトピックでは、外部テーブルを使用して ApsaraDB for MongoDB データをクエリする方法と、ApsaraDB for MongoDB から AnalyticDB for MySQL にデータをインポートする方法について説明します。

前提条件

  • AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスタが作成されていること。

  • ENI (Elastic Network Interface)クラスタ情報AnalyticDB for MySQL コンソールの ページの「ネットワーク情報」セクションで、 が有効になっていること。

    重要

    ENI を有効または無効にすると、データベース接続が約 2 分間中断される場合があります。この間、読み取りまたは書き込み操作を実行することはできません。 ENI を有効または無効にする場合は注意してください。

  • AnalyticDB for MySQL クラスタと同じ VPC (Virtual Private Cloud) に ApsaraDB for MongoDB インスタンスが作成されていること。

  • AnalyticDB for MySQL クラスタの VPC CIDR ブロックが、ApsaraDB for MongoDB インスタンスの IP アドレス ホワイトリスト に追加されていること。

ApsaraDB for MongoDB のネストされていないドキュメントからデータをインポートする

サンプルデータ

この例では、ApsaraDB for MongoDB インスタンスの test_mongodb データベースに person という名前のコレクションが作成されます。

use test_mongodb;
db.createCollection("person");

person コレクションにドキュメントが挿入されます。

db.person.insert({"id":1,"name":"james","age":10});
db.person.insert({"id":2,"name":"bond","age":20});
db.person.insert({"id":3,"name":"jack","age":30});
db.person.insert({"id":4,"name":"lock","age":40});

手順

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

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

    2. 左側のナビゲーションウィンドウで、[ジョブ開発] > Sql開発 を選択します。

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

    CREATE EXTERNAL DATABASE adb_external_db;
  3. 外部テーブルを作成します。

    重要

    AnalyticDB for MySQL 外部テーブルは、ApsaraDB for MongoDB コレクションと同じ名前、数量、順序、およびデータ型を持つ必要があります。

    CREATE EXTERNAL TABLE adb_external_db.person (
      id int,
      name string,
      age int
    ) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{
    "mapped_name":"person",
    "location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb",
    "username":"testuser",
    "password":"password",
    }';

    表 1. パラメーター

    パラメーター

    説明

    mapped_name

    ApsaraDB for MongoDB コレクションの名前。この例では、person が使用されています。

    location

    ApsaraDB for MongoDB インスタンスの VPC エンドポイント

    形式: mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/database

    例: mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb

    説明

    ApsaraDB for MongoDB インスタンスに接続する場合、セカンダリノードのエンドポイントを使用しないでください。

    username

    ApsaraDB for MongoDB インスタンスのデータベースアカウント名

    説明

    ApsaraDB for MongoDB は、指定されたデータベースアカウント名とパスワードを確認します。 ApsaraDB for MongoDB インスタンスの VPC エンドポイントに含まれているデータベースアカウント名を使用する必要があります。ご質問がある場合は、テクニカルサポートにお問い合わせください。

    password

    ApsaraDB for MongoDB インスタンスのデータベースアカウントのパスワード。

  4. データをクエリします。

    外部テーブルを作成した後、SELECT ステートメントを実行して、person コレクションのデータをクエリできます。

    SELECT * FROM adb_external_db.person;

    サンプル結果:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lock  |   40 |
    +------+-------+------+
    4 rows in set (0.35 sec)
  5. ApsaraDB for MongoDB インスタンスからインポートされたデータを格納するために、AnalyticDB for MySQL クラスタにデータベースとテーブルを作成します。

    1. adb_demo という名前のデータベースを作成します。

      CREATE DATABASE adb_demo; 
    2. adb_demo.adb_import_test という名前のテーブルを作成します。

      重要

      AnalyticDB for MySQL Enterprise Edition、Basic Edition、および Data Lakehouse Edition クラスタに作成されたテーブルは、AnalyticDB for MySQL 外部テーブルと同じ名前、数量、順序、およびデータ型のフィールドを持つ必要があります。

       CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(id int,name varchar(1023),age int ) DISTRIBUTED BY HASH(id);
  6. ApsaraDB for MongoDB インスタンスから AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスタにデータをインポートします。

    • 方法 1: INSERT INTO ステートメントを実行してデータをインポートします。プライマリキーに重複する値がある場合、データは繰り返し挿入されず、INSERT INTO ステートメントは INSERT IGNORE INTO と同等です。詳細については、「INSERT INTO」をご参照ください。

      INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
    • 方法 2: INSERT OVERWRITE INTO ステートメントを実行して、データを同期的にインポートします。プライマリキーに重複する値がある場合、元の値は新しい値で上書きされます。

      INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
    • 方法 3: INSERT OVERWRITE INTO ステートメントを実行して、データを非同期的にインポートします。詳細については、INSERT OVERWRITE SELECT トピックの「非同期書き込み」セクションをご参照ください。

      SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
  7. データのインポート後、SELECT ステートメントを実行して、adb_demo.adb_import_test テーブルのデータをクエリします。

    SELECT * FROM adb_demo.adb_import_test;

    サンプル結果:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lock  |   40 |
    +------+-------+------+

ApsaraDB for MongoDB のネストされたドキュメントのデータをクエリする

サンプルデータ

この例では、ApsaraDB for MongoDB インスタンスの test_mongodb データベースに test_json という名前のコレクションが作成されます。

db.createCollection("test_json");

test_json コレクションにドキュメントが挿入されます。city フィールドと name フィールドはネストされたフィールドです。

db.test_json.insert(    {
        'id': 1,
        'details':{'city': "hangzhou", "name":"jack"}
    })

手順

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

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

    2. 左側のナビゲーションウィンドウで、[ジョブ開発] > Sql開発 を選択します。

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

    CREATE EXTERNAL DATABASE adb_external_db;
  3. 外部テーブルを作成します。

    重要
    • AnalyticDB for MySQL の外部テーブルは、ApsaraDB for MongoDB コレクションと同じ名前、数量、順序、およびデータ型 のフィールドを持つ必要があります。

    • 外部テーブルを使用して、ApsaraDB for MongoDB のネストされたドキュメントにデータをインポートすることはできません。

    CREATE EXTERNAL TABLE adb_external_db.test_json (
      id int,
      city string,
      name string
    ) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{
    "mapped_name":"test_json",
    "location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb",
    "username":"testuser",
    "password":"password",
    "COLUMN_MAPPING":"city,details.city;name,details.name",
    }';

    パラメーター:

    • COLUMN_MAPPING: 外部テーブルのフィールドと ApsaraDB for MongoDB ドキュメントのフィールド間のマッピングを定義します。たとえば、外部テーブルの city フィールドと ApsaraDB for MongoDB ドキュメントの details.city フィールド間のマッピングが作成されます。

    • 外部テーブルの作成に使用されるその他のパラメーターについては、このトピックの「パラメーター」テーブルをご参照ください。

  4. データのクエリ。

    外部テーブルが作成された後、SELECT 文を実行して test_json コレクションのデータをクエリできます。

    SELECT * FROM adb_external_db.test_json;

    結果例:

    +------+----------+-------+
    | id   |  city    |  name |
    +------+----------+-------+
    |    1 | hangzhou |  jack |
    +------+----------+-------+
    説明

    ApsaraDB for MongoDB のネストされたドキュメントから AnalyticDB for MySQL にデータをインポートするには、まずデータベースとテーブルを作成する必要があります。 詳細については、このトピックの「ApsaraDB for MongoDB のネストされていないドキュメントからデータをインポートする」セクションの手順 5 ~ 7 をご参照ください。

ObjectId フィールドのデータのクエリ

サンプルデータ

この例では、test_objectid という名前のコレクションが、ApsaraDB for MongoDB インスタンスの test_mongodb データベースに作成されます。

db.createCollection("test_objectid");

test_objectid コレクションにドキュメントが挿入されます。

db.test_objectid.insert(    {
        'id': 1,
    })

test_objectid コレクションのデータがクエリされます。

db.test_objectid.find()

サンプル結果:

{
   "_id":"ObjectId("641002ad883a73eb0d7291a7")"
   "id":1
}

手順

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

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

    2. 左側のナビゲーションウィンドウで、[ジョブ開発] > Sql開発 を選択します。

  2. 次の文を実行して、外部データベースを作成します。

    CREATE EXTERNAL DATABASE adb_external_db;
  3. 外部テーブルを作成します。

    重要

    AnalyticDB for MySQL 外部テーブルは、ApsaraDB for MongoDB コレクションと同じ名前、数量、順序、およびデータ型を持つ必要があります。

    CREATE EXTERNAL TABLE adb_external_db.test_objectid (
      id int,
      _id objectid
    ) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{
    "mapped_name":"test_objectid",
    "location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb",
    "username":"testuser",
    "password":"password",
    }';
  4. データをクエリします。

    外部テーブルを作成した後、SELECT 文を実行して test_objectid コレクションのデータをクエリできます。

    SELECT cast(_id as string) FROM adb_external_db.test_objectid;

    サンプル結果:

    +----------------------------+
    |    CAST(_id AS string)     | 
    +----------------------------+
    |  641002ad883a73eb0d7291a7  |
    +----------------------------+
    説明

    ObjectId フィールドから AnalyticDB for MySQL にデータをインポートするには、最初にデータベースとテーブルを作成する必要があります。詳細については、このトピックの「AnalyticDB for MySQLApsaraDB for MongoDB のネストされていないドキュメントからデータをインポートする」セクションの手順 5 ~ 7 をご参照ください。

外部テーブルでサポートされているデータ型

AnalyticDB for MySQL 外部テーブルでサポートされているデータ型

ApsaraDB for MongoDB コレクションでサポートされているデータ型

ブール値

ブール値

ObjectId

ObjectId

String

String

Int

32 ビット Integer および Int

Bigint

64 ビット Integer Long

Double

Double

Date

Date