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

AnalyticDB:ApsaraDB for MongoDBからデータをインポートする

最終更新日:Nov 11, 2024

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

前提条件

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

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

  • ApsaraDB for MongoDBインスタンスは、AnalyticDB for MySQLクラスターと同じ仮想プライベートクラウド (VPC) に作成されます。 詳細については、「インスタンスの作成」をご参照ください。

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

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

サンプルデータ

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

use test_mongodb;
db.createCollection("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 コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。  

      [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 Parameters

    パラメーター

    説明

    mapped_name

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

    場所

    ApsaraDB for MongoDBインスタンスのVPCエンドポイント。 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インスタンスのデータベースアカウントの名前。 データベースアカウントの作成方法については、「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. AnalyticDB for MySQLクラスターにデータベースとテーブルを作成し、ApsaraDB for MongoDBインスタンスからインポートされたデータを保存します。

    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 ) DISTRIBUTE 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のネストされたドキュメントのクエリデータ

サンプルデータ

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

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 コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。[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 コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。  

      [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にデータをインポートするには、まずデータベースとテーブルを作成する必要があります。 詳細については、このトピックの「ApsaraDB For MongoDBのネストされていないドキュメントからデータをインポートする」の手順5〜7を参照してください。

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

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

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

Boolean

Boolean

ObjectId

ObjectId

String

String

Int

32-bit Integer and Int

Bigint

64-bit Integer Long

Double

Double

Date

Date