このトピックでは、外部テーブルを使用して MongoDB データをクエリし、そのデータを AnalyticDB for MySQL にインポートする方法について説明します。
前提条件
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターが作成されていること。
AnalyticDB for MySQL コンソールの [クラスター情報] ページのネットワーク情報セクションで、[ENI ネットワーク] スイッチが有効になっていること。
重要ENI ネットワークを有効または無効にすると、データベース接続が約 2 分間中断されます。 この期間中は、読み取りおよび書き込み操作を実行できません。 ENI ネットワークを有効または無効にする前に、影響を慎重に評価してください。
MongoDB インスタンスと AnalyticDB for MySQL クラスターが同じ VPC にあること。
AnalyticDB for MySQL クラスターの VPC CIDR ブロックが MongoDB インスタンスの ホワイトリスト に追加されていること。
MongoDB のネストされていないドキュメントからデータをインポートする
サンプルデータ
この例では、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 コンソールにログインします。 コンソールの左上隅でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 管理するクラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
次の文を実行して、外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;外部テーブルを作成します。
重要AnalyticDB for MySQL 外部テーブルには、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
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。説明セカンダリノードのエンドポイントを使用して MongoDB インスタンスに接続しないでください。
username
説明MongoDB は、ターゲットデータベースでデータベースアカウントとパスワードを検証します。 MongoDB インスタンスの VPC エンドポイントで指定されたデータベースのアカウントを使用します。 ご不明な点がある場合は、テクニカルサポートにお問い合わせください。
password
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)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);
MongoDB から AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターにデータをインポートします。
方法 1:
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文を使用してデータを非同期にインポートします。 詳細については、「非同期書き込み」をご参照ください。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 | +------+-------+------+
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 コンソールにログインします。 コンソールの左上隅でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 管理するクラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
次の文を実行して、外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;外部テーブルを作成します。
重要AnalyticDB for MySQL 外部テーブルには、MongoDB ドキュメントと同じフィールド名、フィールド数、フィールド順序、およびデータ型が必要です。
外部テーブルを使用して 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: 外部テーブルのフィールドと MongoDB ドキュメントのフィールド間のマッピングを定義します。 たとえば、外部テーブルのcityフィールドと MongoDB ドキュメントのdetails.cityフィールドの間にマッピングが作成されます。外部テーブルの他のパラメーターについては、「パラメーターの説明」をご参照ください。
データをクエリします。
外部テーブルが作成された後、SELECT 文を使用して
test_jsonコレクションのデータをクエリできます。SELECT * FROM adb_external_db.test_json;次の結果が返されます。
+------+----------+-------+ | id | city | name | +------+----------+-------+ | 1 | hangzhou | jack | +------+----------+-------+説明MongoDB のネストされたドキュメントから AnalyticDB for MySQL にデータをインポートするには、まずデータベースとテーブルを作成する必要があります。 詳細については、このトピックの「MongoDB のネストされていないドキュメントからデータをインポートする」セクションのステップ 5 から 7 をご参照ください。
ObjectId フィールドをクエリする
サンプルデータ
test_mongodb データベースに、test_objectid という名前のコレクションを作成します。
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 コンソールにログインします。 コンソールの左上隅でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 管理するクラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
次の文を実行して、外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;外部テーブルを作成します。
重要AnalyticDB for MySQL 外部テーブルには、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 にインポートするには、まずデータを格納するデータベースとテーブルを作成する必要があります。 詳細については、「MongoDB のネストされていないドキュメントからデータをインポートする」のステップ 5 から 7 をご参照ください。
AnalyticDB for MySQL 外部テーブルと MongoDB コレクション間のデータ型マッピング
AnalyticDB for MySQL 外部テーブル | MongoDB コレクション |
ブール値 | ブール値 |
ObjectId | ObjectId |
文字列 | 文字列 |
Int | 32 ビット整数、Int |
Bigint | 64 ビット整数 Long |
Double | Double |
Date | Date |