Topik ini menjelaskan cara menggunakan tabel eksternal untuk mengkueri data MongoDB dan mengimpornya ke AnalyticDB for MySQL.
Prasyarat
-
Kluster AnalyticDB for MySQL harus merupakan Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.
-
Sakelar jaringan ENI Network diaktifkan pada bagian Informasi Jaringan di halaman Cluster Information di konsol AnalyticDB for MySQL.
PentingMengaktifkan atau menonaktifkan jaringan ENI akan memutus koneksi database selama sekitar 2 menit. Selama periode ini, operasi baca dan tulis tidak dapat dilakukan. Evaluasi dampaknya secara hati-hati sebelum mengaktifkan atau menonaktifkan jaringan ENI.
-
Instans MongoDB dan kluster AnalyticDB for MySQL berada dalam VPC yang sama.
-
Blok CIDR VPC dari kluster AnalyticDB for MySQL telah ditambahkan ke daftar putih instans MongoDB.
Impor data dari dokumen non-nested di MongoDB
Data contoh
Pada contoh ini, koleksi bernama person dibuat di database test_mongodb pada instans MongoDB.
use test_mongodb;
db.createCollection("person");
Masukkan dokumen ke dalam koleksi 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});
Prosedur
-
Buka editor pengembangan SQL.
-
Login ke konsol AnalyticDB for MySQL. Di pojok kiri atas, pilih wilayah tempat kluster berada. Di panel navigasi sebelah kiri, klik Clusters, lalu klik ID kluster target.
-
Di panel navigasi sebelah kiri, pilih Job Development > SQL Development.
-
-
Jalankan pernyataan berikut untuk membuat database eksternal.
CREATE EXTERNAL DATABASE adb_external_db; -
Buat tabel eksternal.
PentingTabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan dokumen 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", }';Tabel 1. Parameter
Parameter
Deskripsi
mapped_name
Nama koleksi MongoDB. Pada contoh ini, namanya adalah
person.location
Titik akhir VPC dari instans ApsaraDB for MongoDB.
Format:
mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/database.Contoh:
mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb.CatatanJangan gunakan titik akhir node secondary untuk menghubungkan ke instans MongoDB.
username
Akun database dari instans MongoDB.
CatatanMongoDB memverifikasi akun database dan password di database tujuan. Gunakan akun dari database yang ditentukan dalam titik akhir VPC instans MongoDB. Jika Anda memiliki pertanyaan, hubungi dukungan teknis.
password
Password dari akun database MongoDB.
-
Kueri data.
Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk mengkueri data dalam koleksi
person.SELECT * FROM adb_external_db.person;Hasil berikut dikembalikan:
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+ 4 rows in set (0.35 sec) -
Buat database dan tabel di kluster AnalyticDB for MySQL untuk menyimpan data yang diimpor dari MongoDB.
-
Buat database bernama
adb_demo.CREATE DATABASE adb_demo; -
Buat tabel bernama
adb_demo.adb_import_test.PentingTabel yang dibuat di kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan tabel eksternal AnalyticDB for MySQL.
CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(id int,name varchar(1023),age int ) DISTRIBUTED BY HASH(id);
-
-
Impor data dari MongoDB ke kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.
-
Metode 1: Gunakan pernyataan
INSERT INTOuntuk mengimpor data. Jika nilai primary key duplikat, data baru akan diabaikan. Ini setara dengan menggunakanINSERT IGNORE INTO. Untuk informasi lebih lanjut, lihat INSERT INTO.INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Metode 2: Gunakan pernyataan
INSERT OVERWRITE INTOuntuk mengimpor data secara sinkron. Ini akan menimpa data yang sudah ada di tabel.INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Metode 3: Gunakan pernyataan
INSERT OVERWRITE INTOuntuk mengimpor data secara asinkron. Untuk informasi lebih lanjut, lihat Asynchronous write.SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
-
-
Setelah data diimpor, Anda dapat menggunakan pernyataan SELECT untuk mengkueri data di tabel
adb_demo.adb_import_test.SELECT * FROM adb_demo.adb_import_test;Hasil berikut dikembalikan:
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+
Kueri dokumen nested di MongoDB
Data contoh
Di database test_mongodb, buat koleksi bernama test_json.
db.createCollection("test_json");
Masukkan dokumen ke dalam koleksi test_json. Bidang city dan name adalah bidang nested.
db.test_json.insert( {
'id': 1,
'details':{'city': "hangzhou", "name":"jack"}
})
Prosedur
-
Buka editor pengembangan SQL.
-
Login ke konsol AnalyticDB for MySQL. Di pojok kiri atas, pilih wilayah tempat kluster berada. Di panel navigasi sebelah kiri, klik Clusters, lalu klik ID kluster target.
-
Di panel navigasi sebelah kiri, pilih Job Development > SQL Development.
-
-
Jalankan pernyataan berikut untuk membuat database eksternal.
CREATE EXTERNAL DATABASE adb_external_db; -
Buat tabel eksternal.
Penting-
Tabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan dokumen MongoDB.
-
Tabel eksternal tidak dapat digunakan untuk menulis data ke dokumen nested di 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", }';Parameter:
-
COLUMN_MAPPING: Menentukan pemetaan antara bidang tabel eksternal dan bidang dokumen MongoDB. Misalnya, pemetaan dibuat antara bidangcitypada tabel eksternal dan bidangdetails.citypada dokumen MongoDB. -
Untuk informasi tentang parameter lain untuk tabel eksternal, lihat Deskripsi parameter.
-
-
Kueri data.
Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk mengkueri data dalam koleksi
test_json.SELECT * FROM adb_external_db.test_json;Hasil berikut dikembalikan:
+------+----------+-------+ | id | city | name | +------+----------+-------+ | 1 | hangzhou | jack | +------+----------+-------+CatatanUntuk mengimpor data dari dokumen nested di MongoDB ke AnalyticDB for MySQL, Anda harus terlebih dahulu membuat database dan tabel. Untuk informasi lebih lanjut, lihat Langkah 5 hingga 7 di bagian Impor data dari dokumen non-nested di MongoDB pada topik ini.
Kueri bidang ObjectId
Data contoh
Di database test_mongodb, buat koleksi bernama test_objectid.
db.createCollection("test_objectid");
Masukkan dokumen ke dalam koleksi test_objectid.
db.test_objectid.insert( {
'id': 1,
})
Kueri dokumen dalam koleksi test_objectid.
db.test_objectid.find()
Hasil berikut dikembalikan:
{
"_id":"ObjectId("641002ad883a73eb0d7291a7")"
"id":1
}
Prosedur
-
Buka editor pengembangan SQL.
-
Login ke konsol AnalyticDB for MySQL. Di pojok kiri atas, pilih wilayah tempat kluster berada. Di panel navigasi sebelah kiri, klik Clusters, lalu klik ID kluster target.
-
Di panel navigasi sebelah kiri, pilih Job Development > SQL Development.
-
-
Jalankan pernyataan berikut untuk membuat database eksternal.
CREATE EXTERNAL DATABASE adb_external_db; -
Buat tabel eksternal.
PentingTabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan dokumen 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", }'; -
Kueri data.
Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk mengkueri data dalam koleksi
test_objectid.SELECT cast(_id as string) FROM adb_external_db.test_objectid;Contoh hasil:
+----------------------------+ | CAST(_id AS string) | +----------------------------+ | 641002ad883a73eb0d7291a7 | +----------------------------+CatatanUntuk mengimpor data yang berisi bidang ObjectId ke AnalyticDB for MySQL, Anda harus terlebih dahulu membuat database dan tabel untuk menyimpan data tersebut. Untuk informasi lebih lanjut, lihat Langkah 5 hingga 7 di Impor data dari dokumen non-nested di MongoDB.
Pemetaan tipe data antara tabel eksternal AnalyticDB for MySQL dan koleksi MongoDB
|
AnalyticDB for MySQL tabel eksternal |
Koleksi MongoDB |
|
Boolean |
Boolean |
|
ObjectId |
ObjectId |
|
String |
String |
|
Int |
Integer 32-bit, Int |
|
Bigint |
Integer 64-bit Long |
|
Double |
Double |
|
Date |
Date |