MongoDB menyimpan data sebagai dokumen JSON bersarang. Saat memigrasikan data ini ke MaxCompute, Anda perlu mengekstrak bidang tertentu menggunakan jalur notasi titik (dot-notation) dan memetakannya ke tipe kolom yang sesuai. Topik ini menjelaskan cara menggunakan layanan Data Integration dari DataWorks untuk mengonfigurasi pekerjaan sinkronisasi batch yang membaca bidang JSON bersarang dari koleksi MongoDB dan memuatnya ke dalam tabel MaxCompute.
Contoh ini menggunakan instans ApsaraDB for MongoDB di virtual private cloud (VPC) dan mengekstrak bidang store.bicycle.color dari dokumen JSON bersarang.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan MaxCompute dan DataWorks. Untuk informasi selengkapnya, lihat Aktifkan MaxCompute dan DataWorks.
Menambahkan sumber data MaxCompute di DataWorks. Untuk informasi selengkapnya, lihat Tambahkan sumber data MaxCompute.
Membuat alur kerja di ruang kerja Anda dalam mode dasar. Untuk informasi selengkapnya, lihat Buat alur kerja.
Langkah 1: Siapkan data uji di MongoDB
Langkah ini mencakup pembuatan pengguna database, pengunggahan data JSON contoh ke MongoDB, dan verifikasi bahwa data tersebut dapat diakses sebelum Anda mengonfigurasi pekerjaan sinkronisasi.
Buat pengguna database
Buat pengguna di database MongoDB Anda agar DataWorks dapat terhubung dengannya. Jalankan perintah berikut:
db.createUser({user:"bookuser",pwd:"123456",roles:["user1"]})Perintah ini membuat pengguna bernama bookuser dengan password 123456, yang ditetapkan ke role user1 yang memiliki izin akses data.
Unggah data uji
Jika Anda menggunakan instans ApsaraDB for MongoDB di VPC, ajukan terlebih dahulu titik akhir publik untuk instans tersebut. Kelompok resource bersama DataWorks terhubung ke MongoDB melalui jaringan publik.
Unggah dokumen JSON berikut ke koleksi userlog di database admin:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}Verifikasi data yang diunggah
Login ke database MongoDB di Konsol Data Management (DMS) dan jalankan perintah berikut untuk memastikan data telah diunggah:
db.userlog.find().limit(10)Langkah 2: Konfigurasikan pekerjaan sinkronisasi di DataWorks
Langkah ini mencakup pembuatan tabel tujuan di MaxCompute, penambahan MongoDB sebagai sumber data, serta konfigurasi node sinkronisasi batch yang memetakan jalur bidang JSON ke kolom MaxCompute.
Buat tabel tujuan di MaxCompute
Login ke Konsol DataWorks.
Klik kanan alur kerja Anda dan pilih new > MaxCompute > table.
Pada halaman create a table, pilih tipe engine dan masukkan table name.
Pada halaman pengeditan tabel, klik DDL Statement.
Pada kotak dialog DDL Statement, masukkan pernyataan berikut dan klik Generate Table Schema:
PentingNama tabel dalam pernyataan DDL harus sesuai dengan nilai Name yang Anda tetapkan pada halaman create a table.
create table mqdata (mqdata string);Klik Commit to Production Environment.
Tambahkan sumber data MongoDB
Tambahkan instans MongoDB Anda sebagai sumber data di DataWorks. Untuk informasi selengkapnya, lihat Tambahkan sumber data MongoDB.
Buat node sinkronisasi batch
Pada halaman analitik data, klik kanan alur kerja Anda dan pilih new > data integration > offline synchronization.
Pada kotak dialog create a node, masukkan node name dan klik submit.
Pada bilah navigasi atas, klik ikon
untuk beralih ke mode skrip.Dalam mode skrip, klik ikon
.Pada kotak dialog import Template, pilih SOURCE type, data source, target type, dan data source tujuan, lalu klik confirm.
Ganti konten templat dengan skrip berikut:
{ "type": "job", "steps": [ { "stepType": "mongodb", "parameter": { "datasource": "mongodb_userlog", "column": [ { "name": "store.bicycle.color", "type": "document.String" } ], "collectionName": "userlog" }, "name": "Reader", "category": "reader" }, { "stepType": "odps", "parameter": { "partition": "", "isCompress": false, "truncate": true, "datasource": "odps_source", "column": [ "mqdata" ], "emptyAsNull": false, "table": "mqdata" }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, "throttle": false } } }Tabel berikut menjelaskan parameter utama:
Parameter Nilai Deskripsi datasource(Reader)mongodb_userlogNama sumber data MongoDB Anda name(column)store.bicycle.colorJalur notasi titik ke bidang JSON yang akan diekstrak type(column)document.StringTipe data bidang. Gunakan document.Stringuntuk bidang bersarang. Untuk bidang tingkat atas (sepertiexpensive), gunakanstringcollectionNameuserlogKoleksi MongoDB yang akan dibaca datasource(Writer)odps_sourceNama sumber data MaxCompute Anda column(Writer)mqdataKolom di tabel MaxCompute yang akan ditulis tablemqdataNama tabel MaxCompute Contoh berikut menunjukkan bagaimana dokumen JSON dipetakan ke tabel MaxCompute setelah migrasi:
Bidang dokumen MongoDB Nilai Kolom MaxCompute Nilai yang disimpan store.bicycle.color"red"mqdataredKlik ikon
untuk menjalankan pekerjaan.Periksa operation Log untuk memastikan pekerjaan selesai tanpa error.
Langkah 3: Verifikasi hasil migrasi
Klik kanan alur kerja Anda dan pilih new > MaxCompute > ODPS SQL.
Pada kotak dialog create a node, masukkan node name dan klik submit.
Pada tab konfigurasi node, masukkan kueri berikut:
SELECT * from mqdata;Klik ikon
untuk menjalankan kueri.Periksa operation Log untuk memastikan kueri mengembalikan data yang dimigrasikan. Hasilnya harus berisi nilai
red, yang diekstrak daristore.bicycle.colorpada dokumen sumber.
Referensi tipe bidang JSON
Parameter type dalam konfigurasi kolom Reader mengontrol cara DataWorks menginterpretasikan nilai JSON yang diekstrak.
| Lokasi bidang | Contoh bidang | type value | Catatan |
|---|---|---|---|
| Bersarang (non-tingkat atas) | store.bicycle.color | document.String | Gunakan tipe akhir dari nilai yang diekstrak |
| Tingkat atas | expensive | string | Bidang tingkat atas menggunakan nama tipe sederhana |