Topik ini menjelaskan cara menggunakan tabel eksternal untuk menanyakan data MongoDB dan mengimpor data tersebut ke AnalyticDB for MySQL.
Prasyarat
Sebuah kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse telah dibuat.
Saklar ENI Network diaktifkan di bagian Informasi Jaringan pada halaman Cluster Information di 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 dengan hati-hati dampaknya sebelum Anda mengaktifkan atau menonaktifkan jaringan ENI.
Instans MongoDB dan kluster AnalyticDB for MySQL berada di VPC yang sama.
Blok CIDR VPC dari kluster AnalyticDB for MySQL ditambahkan ke daftar putih instans MongoDB.
Impor data dari dokumen non-nested di MongoDB
Data contoh
Dalam contoh ini, sebuah koleksi bernama person dibuat di dalam database test_mongodb dari sebuah 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
Pergi ke editor SQL.
Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi di sisi kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster.
Di panel navigasi di sebelah kiri, klik .
Eksekusi 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. Dalam 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 sekunder untuk terhubung ke instans MongoDB.
username
Akun database dari instans MongoDB.
CatatanMongoDB memverifikasi akun database dan kata sandi di database tujuan. Gunakan akun dari database yang ditentukan dalam titik akhir VPC instans MongoDB. Jika Anda memiliki pertanyaan, hubungi dukungan teknis.
password
Kata sandi dari akun database MongoDB.
Tanyakan data.
Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk menanyakan 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 kunci utama duplikat, data baru 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 menimpa data yang 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 Penulisan Asinkron.SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
Setelah data diimpor, Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dalam 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 | +------+-------+------+
Tanyakan dokumen nested di MongoDB
Data contoh
Di dalam 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
Pergi ke editor SQL.
Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi di sisi kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster.
Di panel navigasi di sebelah kiri, klik .
Eksekusi 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.
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. Sebagai contoh, pemetaan dibuat antara bidangcitydari tabel eksternal dan bidangdetails.citydari dokumen MongoDB.Untuk informasi tentang parameter lainnya untuk tabel eksternal, lihat Deskripsi Parameter.
Tanyakan data.
Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk menanyakan 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 dari topik ini.
Tanyakan bidang ObjectId
Data contoh
Di dalam 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,
})Tanyakan dokumen dalam koleksi test_objectid.
db.test_objectid.find()Hasil berikut dikembalikan:
{
"_id":"ObjectId("641002ad883a73eb0d7291a7")"
"id":1
}Prosedur
Pergi ke editor SQL.
Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi di sisi kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster.
Di panel navigasi di sebelah kiri, klik .
Eksekusi 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", }';Tanyakan data.
Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dalam koleksi
test_objectid.SELECT cast(_id as string) FROM adb_external_db.test_objectid;Hasil contoh:
+----------------------------+ | 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 |