このトピックでは、外部テーブルを使用して 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});
手順
SQL エディターに移動します。
AnalyticDB for MySQL コンソール にログオンします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。Enterprise Edition、Basic Edition、または Data Lakehouse Edition タブで、管理するクラスタを見つけ、クラスタ ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
次のステートメントを実行して、外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;
外部テーブルを作成します。
重要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 インスタンスのデータベースアカウントのパスワード。
データをクエリします。
外部テーブルを作成した後、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)
ApsaraDB for MongoDB インスタンスからインポートされたデータを格納するために、AnalyticDB for MySQL クラスタにデータベースとテーブルを作成します。
adb_demo
という名前のデータベースを作成します。CREATE DATABASE adb_demo;
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);
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;
データのインポート後、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"}
})
手順
SQL エディターに移動します。
AnalyticDB for MySQL コンソール にログオンします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Enterprise Edition、Basic Edition、または Data Lakehouse Edition タブで、管理するクラスタを見つけ、クラスタ ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
次のステートメントを実行して、外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;
外部テーブルを作成します。
重要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
フィールド間のマッピングが作成されます。外部テーブルの作成に使用されるその他のパラメーターについては、このトピックの「パラメーター」テーブルをご参照ください。
データのクエリ。
外部テーブルが作成された後、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
}
手順
SQL エディターに移動します。
AnalyticDB for MySQL コンソール にログオンします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。Enterprise Edition、Basic Edition、または Data Lakehouse Edition タブで、管理するクラスタを見つけ、クラスタ ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
次の文を実行して、外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;
外部テーブルを作成します。
重要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", }';
データをクエリします。
外部テーブルを作成した後、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 |