このトピックでは、AnalyticDB for MySQL data Lakehouse Edition (V3.0) の外部テーブルを使用してApsaraDB for MongoDBデータを照会する方法と、ApsaraDB for MongoDBからAnalyticDB for MySQL Data Lakehouse Edition (V3.0) にデータをインポートする方法について説明します。
前提条件
AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターは、ApsaraDB for MongoDBインスタンスと同じ仮想プライベートクラウド (VPC) に作成されます。 詳細については、「クラスターの作成」をご参照ください。
- コンソールの [クラスター情報] ページの [ネットワーク情報] セクションで、AnalyticDB for MySQLクラスターのENIがオンになっています。
AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターのVPC CIDRブロックが、ApsaraDB for MongoDBインスタンスのホワイトリストに追加されます。 詳細については、「ApsaraDB For MongoDBインスタンスのIPアドレスホワイトリストの変更」をご参照ください。
ApsaraDB for MongoDBのネストされていないドキュメントからデータをインポートする
サンプルデータ
この例では、ApsaraDB for mongodbインスタンスのtest_mongodb
データベースにperson
という名前のコレクションが作成されています。
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コンソールにログインします。
- ページの左上隅で、クラスターが存在するリージョンを選択します。
- 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
- Lake Warehouse Edition(3.0) タブでクラスターを見つけ、クラスター ID をクリックします。
- 左側のナビゲーションウィンドウで、 を選択します。
- 次のステートメントを実行して、外部データベースを作成します。
外部データベースの作成adb_external_db;
外部テーブルを作成します。
重要AnalyticDB for MySQL外部テーブルは、ApsaraDB for MongoDBコレクションと同じフィールドの名前、数量、順序、およびデータタイプを持つ必要があります。
外部テーブルの作成adb_external_db.person ( id int, 名前文字列, 年齢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
データベースアカウントのパスワードを設定します。
データの照会
外部テーブルの作成後、SELECTステートメントを実行して
person
コレクションのデータを照会できます。SELECT * からadb_external_db.person;
サンプル結果:
+ ------ ------- -------- | id | 名前 | 年齢 | + ----- + ------- + ------- + | 1 | ジェームズ | 10 | | 2 | ボンド | 20 | | 3 | ジャック | 30 | | 4 | ロック | 40 | + ----- + ------- + ------- + セットの4列 (0.35秒)
データベースとテーブルを作成します。AnalyticDB for MySQL データレイクハウスエディション (V3.0)ApsaraDB for MongoDBインスタンスからインポートされたデータを保存します。
という名前のデータベースを作成します。
adb_demo
.CREATE DATABASE adb_demo;
という名前のテーブルを作成します。
adb_demo.adb_import_test
.重要AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターに作成されるテーブルは、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 データレイクハウスエディション (V3.0)クラスター
方法1:
INSERT INTO
ステートメントを実行してデータをインポートします。 主キーの値が重複している場合、データは繰り返し挿入されず、INSERT INTOステートメントはINSERT IGNORE INTO
と同等です。 詳細については、「INSERT INTO」をご参照ください。adb_demo.adb_import_test SELECT * からadb_external_db.personに挿入します。
方法2:
INSERT OVERWRITE INTO
ステートメントを実行して、データを同期的にインポートします。 主キーの値が重複している場合、元の値は新しい値で上書きされます。INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * からadb_external_db.person;
方法3:
INSERT OVERWRITE INTO
ステートメントを実行して、データを非同期的にインポートします。 詳細については、「INSERT OVERWRITE SELECT」トピックの「非同期書き込み」セクションをご参照ください。ジョブ挿入の上書きadb_demo.adb_import_test SELECT * からadb_external_db.person;
データがインポートされたら、SELECTステートメントを実行して、
adb_demo.adb_import_test
テーブルを使用します。SELECT * からadb_demo.adb_import_test;
サンプル結果:
+ ------ ------- -------- | id | 名前 | 年齢 | + ----- + ------- + ------- + | 1 | ジェームズ | 10 | | 2 | ボンド | 20 | | 3 | ジャック | 30 | | 4 | ロック | 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コンソールにログインします。
- ページの左上隅で、クラスターが存在するリージョンを選択します。
- 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
- Lake Warehouse Edition(3.0) タブでクラスターを見つけ、クラスター ID をクリックします。
- 左側のナビゲーションウィンドウで、 を選択します。
- 次のステートメントを実行して、外部データベースを作成します。
外部データベースの作成adb_external_db;
外部テーブルを作成します。
重要AnalyticDB for MySQL外部テーブルは、ApsaraDB for MongoDBコレクションと同じフィールドの名前、数量、順序、およびデータタイプを持つ必要があります。
外部テーブルを使用してApsaraDB for MongoDBのネストされたドキュメントにデータをインポートすることはできません。
外部テーブルの作成adb_external_db.test_json ( id int, 都市文字列、 名前文字列 ) 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;nam e,details.name" 、} ';
パラメーター:
COLUMN_MAPPING: 外部テーブルフィールドとApsaraDB for MongoDBドキュメントフィールド間のマッピングを定義します。 たとえば、外部テーブルの
city
フィールドとApsaraDB For MongoDBドキュメントのdetails.city
フィールドの間のマッピングが作成されます。外部テーブルの作成に使用されるその他のパラメーターについては、このトピックの「パラメーター」表を参照してください。
データの照会
外部テーブルの作成後、SELECTステートメントを実行して
test_json
コレクションのデータを照会できます。SELECT * からadb_external_db.test_json;
サンプル結果:
+ ------ --------- ---------- + | id | 都市 | 名前 | + ----- ---------- --------- + | 1 | 杭州 | ジャック | + ----- ---------- --------- +
説明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コンソールにログインします。
- ページの左上隅で、クラスターが存在するリージョンを選択します。
- 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
- Lake Warehouse Edition(3.0) タブでクラスターを見つけ、クラスター ID をクリックします。
- 左側のナビゲーションウィンドウで、 を選択します。
- 次のステートメントを実行して、外部データベースを作成します。
外部データベースの作成adb_external_db;
外部テーブルを作成します。
重要AnalyticDB for MySQL外部テーブルは、ApsaraDB for MongoDBコレクションと同じフィールドの名前、数量、順序、およびデータタイプを持つ必要があります。
外部テーブルの作成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キャスト (文字列として_id) FROM adb_external_db.test_objectid;
サンプル結果:
+ ---------------------------- + | CAST(_id AS文字列) | + ---------------------------- + | 641002ad883a73eb0d7291a7 | + ---------------------------- +
説明ObjectIdフィールドからAnalyticDB for MySQLにデータをインポートするには、まずデータベースとテーブルを作成する必要があります。 詳細については、このトピックの「ApsaraDB For MongoDBのネストされていないドキュメントからデータをインポートする」の手順5〜7を参照してください。
外部テーブルでサポートされるデータ型
AnalyticDB for MySQL外部テーブルでサポートされているデータ型 | ApsaraDB for MongoDBコレクションでサポートされているデータ型 |
Boolean | Boolean |
ObjectId | ObjectId |
String | String |
Int | 32ビット整数とInt |
Bigint | 64ビット整数長 |
Double | Double |
日付 | 日付 |