このトピックでは、外部テーブルを使用して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});
手順
SQLエディターに移動します。
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
[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 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インスタンスのデータベースアカウントのパスワード。
データを照会します。
外部テーブルの作成後、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)
AnalyticDB for MySQLクラスターにデータベースとテーブルを作成し、ApsaraDB for MongoDBインスタンスからインポートされたデータを保存します。
という名前のデータベースを作成します。
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 ) DISTRIBUTE 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のネストされたドキュメントのクエリデータ
サンプルデータ
この例では、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"}
})
手順
SQLエディターに移動します。
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。[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 コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
[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にデータをインポートするには、まずデータベースとテーブルを作成する必要があります。 詳細については、このトピックの「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 |