All Products
Search
Document Center

DataWorks:Sumber data MongoDB

Last Updated:Jun 21, 2026

DataWorks menyediakan sinkronisasi data dua arah dengan MongoDB. Topik ini menjelaskan kemampuan sinkronisasi data yang disediakan DataWorks untuk MongoDB.

Versi yang didukung

Didukung hanya untuk MongoDB versi 4.x, 5.x, 6.x, 7.x, dan 8.0.

Catatan penggunaan

  • Lakukan koneksi ke database MongoDB menggunakan akun yang dibuat khusus untuk database tersebut. Jika Anda menggunakan sumber data ApsaraDB for MongoDB, akun root dibuat secara default. Untuk alasan keamanan, kami menyarankan agar Anda tidak menggunakan akun root saat menambahkan sumber data MongoDB.

  • Jika Anda menggunakan kluster sharded MongoDB, Anda harus mengonfigurasi alamat node mongos untuk sumber data tersebut. Jangan mengonfigurasi alamat node mongod/shard. Jika tidak, tugas sinkronisasi mungkin hanya mengkueri data dari shard tertentu, bukan dari seluruh dataset. Untuk informasi lebih lanjut tentang mongos dan mongod, lihat dokumentasi mongos dan mongod.

  • Jika konkurensi lebih besar dari 1, semua bidang _id dalam koleksi yang dikonfigurasi untuk tugas sinkronisasi harus memiliki tipe data yang sama. Misalnya, semua bidang _id harus bertipe string atau ObjectId. Jika tidak, sebagian data mungkin tidak tersinkronisasi.

    Catatan
    • Ketika konkurensi lebih besar dari 1, tugas dibagi berdasarkan bidang _id. Oleh karena itu, tipe data campuran tidak didukung untuk bidang _id dalam skenario ini. Jika bidang _id berisi beberapa tipe data, atur konkurensi menjadi 1 untuk sinkronisasi data. Untuk melakukannya, jangan mengonfigurasi parameter splitFactor, atau atur parameter splitFactor ke 1.

  • Data Integration tidak mendukung tipe array. Namun, MongoDB mendukung tipe array dan menyediakan fitur pengindeksan yang kuat. Anda dapat mengonfigurasi parameter tertentu untuk mengonversi string menjadi array MongoDB. Setelah konversi, Anda dapat menulis data ke MongoDB secara paralel.

  • Database MongoDB yang dikelola sendiri tidak mendukung akses jaringan publik. Database tersebut hanya dapat diakses melalui jaringan internal Alibaba Cloud.

  • Kluster MongoDB yang dideploy menggunakan Docker tidak didukung.

  • Anda tidak dapat menggunakan parameter query untuk membaca data dari kolom tertentu.

  • Dalam tugas sinkronisasi batch, jika Data Integration tidak dapat mengambil struktur bidang dari MongoDB, Data Integration akan menghasilkan pemetaan bidang untuk enam bidang secara default. Nama bidang tersebut adalah col1, col2, col3, col4, col5, dan col6.

  • Selama eksekusi tugas, perintah splitVector digunakan secara default untuk melakukan sharding pada tugas. Beberapa versi MongoDB tidak mendukung perintah splitVector, yang dapat menyebabkan error no such cmd splitVector. Untuk mencegah error ini, klik ikon image pada konfigurasi tugas, beralih ke editor kode, dan tambahkan parameter berikut ke konfigurasi parameter MongoDB untuk mencegah penggunaan splitVector.

    "useSplitVector" : false

Tipe bidang yang didukung

Tipe data MongoDB yang didukung oleh MongoDB Reader

Data Integration mendukung sebagian besar, tetapi tidak semua, tipe data MongoDB. Pastikan tipe data Anda didukung.

Ketika Data Integration membaca tipe data yang didukung, operasi berikut dilakukan:

  • Untuk tipe data primitif, Data Integration secara otomatis membaca data dari path yang sesuai berdasarkan nama bidang yang dikonfigurasi dalam parameter column. Untuk informasi lebih lanjut, lihat Lampiran: Contoh skrip dan deskripsi parameter untuk MongoDB. Data Integration juga secara otomatis mengonversi tipe data tersebut. Anda tidak perlu menentukan properti type untuk kolom tersebut.

    Type

    Baca batch (MongoDB Reader)

    Deskripsi

    ObjectId

    Didukung

    Tipe object ID.

    Double

    Didukung

    Tipe bilangan titik mengambang 64-bit.

    Integer 32-bit

    Didukung

    Integer 32-bit.

    Integer 64-bit

    Didukung

    Integer 64-bit.

    Decimal128

    Didukung

    Tipe Decimal128.

    Catatan

    Jika suatu bidang dikonfigurasi sebagai tipe nested atau tipe combine, bidang tersebut diproses sebagai objek selama serialisasi JSON. Anda harus menambahkan parameter decimal128OutputType dan mengaturnya ke bigDecimal untuk mengeluarkan data sebagai desimal.

    String

    Didukung

    Tipe string.

    Boolean

    Didukung

    Tipe Boolean.

    Timestamp

    Didukung

    Tipe timestamp.

    Catatan

    BsonTimestamp menyimpan stempel waktu. Anda tidak perlu mempertimbangkan dampak zona waktu. Untuk informasi lebih lanjut, lihat Masalah zona waktu di MongoDB.

    Date

    Dukungan

    Tipe tanggal.

  • Untuk beberapa tipe data kompleks, Anda dapat mengonfigurasi properti type untuk kolom tersebut guna melakukan pemrosesan kustom.

    Type

    Baca batch (MongoDB Reader)

    Deskripsi

    Document

    Didukung

    Tipe dokumen tersemat.

    • Jika properti type tidak dikonfigurasi, Document langsung dikonversi menggunakan serialisasi JSON.

    • Jika properti type diatur ke document, bidang tersebut merupakan tipe nested. MongoDB Reader membaca properti Document berdasarkan path. Untuk contoh detail, lihat Contoh 2: Mengurai secara rekursif Document bersarang multi-level di bawah.

    Array

    Didukung

    Tipe array.

    • Jika type diatur ke array.json atau arrays, data langsung diproses menggunakan serialisasi JSON.

    • Jika type diatur ke array atau document.array, elemen-elemennya digabungkan menjadi string. Pemisah, yang ditentukan dalam properti splitter kolom, adalah koma (,) secara default.

    Penting

    Data Integration tidak mendukung tipe array. Namun, MongoDB mendukung tipe array dan menyediakan fitur pengindeksan yang kuat. Anda dapat mengonfigurasi parameter tertentu untuk mengonversi string menjadi array MongoDB. Setelah konversi, Anda dapat menulis data ke MongoDB secara paralel.

Tipe data Data Integration khusus: combine

Type

Baca batch (MongoDB Reader)

Deskripsi

Combine

Didukung

Tipe data kustom dalam Data Integration.

Jika type diatur ke combine, MongoDB Reader menghapus kunci yang sesuai dengan kolom yang dikonfigurasi dan melakukan serialisasi semua informasi lain dalam seluruh Document menjadi output JSON. Untuk contoh detail, lihat Contoh 1: Menggunakan tipe combine di bawah.

Pemetaan tipe data MongoDB Reader

Tabel berikut mencantumkan pemetaan antara tipe data MongoDB dan tipe data Data Integration untuk MongoDB Reader.

Kategori tipe yang dikonversi

Tipe data MongoDB

LONG

INT, LONG, document.INT, dan document.LONG

DOUBLE

DOUBLE dan document.DOUBLE

STRING

STRING, ARRAY, document.STRING, document.ARRAY, dan COMBINE

DATE

DATE dan document.DATE

BOOLEAN

BOOL dan document.BOOL

BYTES

BYTES dan document.BYTES

Pemetaan tipe data MongoDB Writer

Kategori tipe

Tipe data MongoDB

Integer

INT dan LONG

Bilangan titik mengambang

DOUBLE

String

STRING dan ARRAY

Tanggal dan waktu

DATE

Boolean

BOOL

Biner

BYTES

Contoh 1: Menggunakan tipe combine

Tipe data combine dari plugin MongoDB Reader memungkinkan Anda menggabungkan beberapa bidang dalam dokumen MongoDB menjadi satu string JSON. Misalnya, asumsikan Anda ingin mengimpor bidang dari tiga dokumen MongoDB ke MaxCompute. Dalam contoh berikut, bidang-bidang tersebut direpresentasikan oleh kunci, bukan pasangan kunci-nilai. Bidang a dan b umum di ketiga dokumen tersebut, sedangkan x_n adalah bidang variabel.

  • doc1: a b x_1 x_2

  • doc2: a b x_2 x_3 x_4

  • doc3: a b x_5

Dalam file konfigurasi, Anda harus secara eksplisit menentukan bidang-bidang yang memerlukan pemetaan satu-ke-satu. Untuk bidang-bidang yang ingin Anda gabungkan, berikan nama baru yang berbeda dari nama bidang apa pun yang sudah ada dalam dokumen dan atur type-nya ke COMBINE. Kode berikut memberikan contohnya.

"column": [
{
"name": "a",
"type": "string",
},
{
"name": "b",
"type": "string",
},
{
"name": "doc",
"type": "combine",
}
]

Tabel berikut menunjukkan output akhir di MaxCompute.

odps_column1

odps_column2

odps_column3

a

b

{x_1,x_2}

a

b

{x_2,x_3,x_4}

a

b

{x_5}

Catatan

Setelah Anda menggunakan tipe combine untuk menggabungkan beberapa bidang dalam dokumen MongoDB, bidang-bidang umum secara otomatis dihapus saat output dipetakan ke MaxCompute. Hanya bidang unik dari dokumen yang dipertahankan.

Misalnya, a dan b adalah bidang umum di semua dokumen. Setelah bidang-bidang dalam dokumen doc1: a b x_1 x_2 digabungkan menggunakan tipe combine, output-nya adalah {a,b,x_1,x_2}. Saat hasil ini dipetakan ke MaxCompute, bidang umum a dan b dihapus. Output akhirnya adalah {x_1,x_2}.

Contoh 2: Mengurai secara rekursif Document bersarang multi-level

Jika sebuah dokumen di MongoDB memiliki beberapa level nesting, Anda dapat mengonfigurasi tipe document untuk menguraikannya secara rekursif. Kode berikut memberikan contohnya.

  • Data sumber di MongoDB:

    {
        "name": "name1",
        "a":
        {
            "b":
            {
                "c": "this is value"
            }
        }
    }
  • Konfigurasi kolom MongoDB:

    {"name":"_id","type":"string"}
    {"name":"name","type":"string"}
    {"name":"a.b.c","type":"document"}

    Setelah konfigurasi selesai, bidang sumber dan tujuan dipetakan sebagai berikut: _id dipetakan ke id, name dipetakan ke name, dan a.b.c dipetakan ke c.

Dengan konfigurasi di atas, nilai bidang sumber bersarang a.b.c ditulis ke bidang tujuan c. Setelah tugas sinkronisasi dijalankan, data yang ditulis ke tujuan adalah this is value.

Tambahkan sumber data

Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk dalam Manajemen sumber data. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.

Kembangkan tugas sinkronisasi data

Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.

Konfigurasikan tugas sinkronisasi batch untuk satu tabel

Konfigurasikan tugas sinkronisasi real-time untuk satu tabel

Lihat Konfigurasikan tugas sinkronisasi real-time untuk satu tabel.

Konfigurasikan tugas sinkronisasi untuk seluruh database

Anda dapat mengonfigurasi tugas untuk sinkronisasi batch, sinkronisasi real-time penuh dan inkremental, atau sinkronisasi real-time dari database sharded untuk seluruh database. Untuk informasi lebih lanjut, lihat Tugas sinkronisasi batch untuk seluruh database dan Konfigurasikan tugas sinkronisasi real-time untuk seluruh database.

Praktik terbaik

FAQ

Lampiran: Contoh skrip dan deskripsi parameter untuk MongoDB

Konfigurasikan tugas sinkronisasi batch menggunakan editor kode

Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasi mode skrip. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.

Contoh skrip Reader

Skrip berikut adalah contoh pekerjaan yang dikonfigurasi untuk mengekstrak data dari MongoDB ke lingkungan lokal. Untuk informasi lebih lanjut tentang parameter, lihat deskripsi parameter berikut.

Penting
  • Sebelum menjalankan kode, hapus komentar.

  • Anda tidak dapat mengekstrak elemen tertentu dari array.

{
    "type":"job",
    "version":"2.0",// Nomor versi.
    "steps":[
        {
            "category": "reader",
            "name": "Reader",
            "parameter": {
                "datasource": "datasourceName", // Nama sumber data.
                "collectionName": "tag_data", // Nama koleksi.
                "query": "", // Kueri penyaringan data.
                "column": [
                    {
                        "name": "unique_id", // Nama bidang.
                        "type": "string" // Tipe bidang.
                    },
                    {
                        "name": "sid",
                        "type": "string"
                    },
                    {
                        "name": "user_id",
                        "type": "string"
                    },
                    {
                        "name": "auction_id",
                        "type": "string"
                    },
                    {
                        "name": "content_type",
                        "type": "string"
                    },
                    {
                        "name": "pool_type",
                        "type": "string"
                    },
                    {
                        "name": "frontcat_id",
                        "type": "array",
                        "splitter": ""
                    },
                    {
                        "name": "categoryid",
                        "type": "array",
                        "splitter": ""
                    },
                    {
                        "name": "gmt_create",
                        "type": "string"
                    },
                    {
                        "name": "taglist",
                        "type": "array",
                        "splitter": " "
                    },
                    {
                        "name": "property",
                        "type": "string"
                    },
                    {
                        "name": "scorea",
                        "type": "int"
                    },
                    {
                        "name": "scoreb",
                        "type": "int"
                    },
                    {
                        "name": "scorec",
                        "type": "int"
                    },
                    {
                        "name": "a.b",
                        "type": "document.int"
                    },
                    {
                        "name": "a.b.c",
                        "type": "document.array",
                        "splitter": " "
                    }
                ]
            },
            "stepType": "mongodb"
        },
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "common": { 
            "column": { 
                "timeZone": "GMT+0" // Zona waktu.
            } 
        },
        "errorLimit":{
            "record":"0"// Jumlah catatan error.
        },
        "speed":{
            "throttle":true,// Menentukan apakah pembatasan kecepatan diaktifkan. Jika parameter ini diatur ke false, pembatasan kecepatan dinonaktifkan dan parameter mbps tidak berlaku. Jika diatur ke true, pembatasan kecepatan diaktifkan.
            "concurrent":1, // Jumlah pekerjaan konkuren.
            "mbps":"12"// Laju pembatasan. 1 mbps = 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Parameter

Deskripsi

datasource

Nama sumber data. Di editor kode, nilai parameter ini harus sama dengan nama sumber data yang ditambahkan.

collectionName

Nama koleksi MongoDB.

hint

Parameter hint memaksa pengoptimal kueri untuk menggunakan indeks tertentu dalam kueri, yang dapat meningkatkan performa. Untuk informasi lebih lanjut, lihat parameter hint. Contoh:

{
"collectionName":"test_collection",
"hint":"{age:1}"
}

column

Array yang menentukan bidang dokumen yang akan dibaca dari MongoDB.

  • name: Nama column.

  • Tipe yang didukung untuk parameter type meliputi:

    • string: String.

    • long: Integer.

    • double: Bilangan titik mengambang.

    • date: Tanggal.

    • bool: Nilai Boolean.

    • bytes: Urutan biner.

    • arrays: Dibaca sebagai string JSON, seperti ["a","b","c"].

    • array: Dibaca sebagai string dengan elemen dipisahkan oleh splitter, seperti a,b,c. Kami menyarankan agar Anda menggunakan format arrays.

    • combine: Saat Anda menggunakan plugin MongoDB Reader untuk membaca data, Anda dapat menggabungkan beberapa bidang dalam dokumen MongoDB menjadi satu string JSON.

  • splitter: MongoDB mendukung tipe array, tetapi framework Data Integration tidak. Oleh karena itu, tipe array yang dibaca dari MongoDB harus digabungkan menjadi string menggunakan pemisah ini.

batchSize

Jumlah catatan yang diambil dalam satu batch. Parameter ini opsional. Nilai default: 1000.

cursorTimeoutInMs

Periode timeout kursor. Parameter ini opsional. Nilai default: 1000 * 60 * 10 = 600000. Jika cursorTimeoutInMs diatur ke nilai negatif, kursor tidak pernah timeout.

Catatan
  • Kami tidak menyarankan mengatur kursor agar tidak pernah timeout. Jika program klien keluar secara tidak terduga, kursor yang tidak pernah timeout akan tetap berada di server MongoDB hingga layanan dimulai ulang.

  • Jika terjadi timeout kursor, Anda dapat melakukan operasi berikut:

    • Kurangi jumlah catatan yang diambil dalam satu batch menggunakan parameter batchSize.

    • Tingkatkan periode timeout kursor menggunakan parameter cursorTimeoutInMs.

query

Gunakan parameter ini untuk menyaring data MongoDB yang dikembalikan. Hanya format waktu tertentu yang didukung. Format Stempel waktu UNIX tidak didukung secara langsung.

Catatan
  • Parameter query tidak mendukung sintaks JavaScript.

  • Membaca data dari kolom tertentu tidak didukung.

Kode berikut memberikan contoh umum untuk parameter query:

  • Kueri data dengan status normal.

    {
      ...
      "query":"{ status: "normal"}"
      ...
    }
  • status: "normal"

    {
      ...
      "query":"{ status: { $in: [ \"normal\", \"forbidden\" ] }}"
      ...
    }
  • Sintaks AND: Kueri data dengan status normal dan usia kurang dari 30.

    {
      ...
      "query":"{ status: \"normal\", age: { $lt: 30 }}"
      ...
    }
  • Sintaks tanggal: Kueri data dengan waktu pembuatan lebih besar dari atau sama dengan 2022-12-01 00:00:00.000. +0800 menunjukkan zona waktu UTC+8.

    {
      ...
      "query":"{ createTime:{$gte:ISODate('2022-12-01T00:00:00.000+0800')}}"
      ...
    }
  • Sintaks tanggal dengan placeholder parameter penjadwalan: Kueri data dengan waktu pembuatan lebih besar dari atau sama dengan titik waktu tertentu.

    {
      ...
      "query":"{ createTime:{$gte:ISODate('$[yyyy-mm-dd]T00:00:00.000+0800')}}"
      ...
    }
    Catatan

    Untuk informasi lebih lanjut tentang parameter penjadwalan, lihat Skenario: Skenario aplikasi khas parameter penjadwalan di Data Integration. Untuk informasi tentang cara menerapkan sinkronisasi inkremental untuk tugas batch, lihat Gunakan parameter penjadwalan di Data Integration.

  • Sinkronisasi inkremental untuk bidang non-waktu.

    Anda dapat menggunakan node assignment untuk memproses bidang menjadi tipe data target, lalu meneruskannya ke Data Integration untuk sinkronisasi data. Misalnya, jika bidang inkremental di MongoDB adalah Stempel waktu UNIX, Anda dapat menggunakan node assignment untuk mengonversi bidang bertipe waktu menjadi Stempel waktu UNIX menggunakan fungsi engine. Kemudian, Anda dapat meneruskan stempel waktu tersebut ke tugas sinkronisasi batch. Untuk informasi lebih lanjut tentang cara menggunakan node assignment, lihat Node assignment.

Catatan

Untuk informasi lebih lanjut tentang sintaks kueri MongoDB, lihat dokumentasi resmi MongoDB.

splitFactor

Jika terjadi kesenjangan data yang parah, pertimbangkan untuk meningkatkan splitFactor guna mencapai sharding yang lebih halus tanpa meningkatkan konkurensi.

Contoh skrip Writer

Skrip berikut adalah contoh pekerjaan sinkronisasi data yang dikonfigurasi untuk menulis data ke MongoDB. Untuk informasi lebih lanjut tentang parameter, lihat deskripsi parameter berikut.

{
    "type": "job",
    "version": "2.0",// Nomor versi.
    "steps": [
        {
            "stepType": "stream",
            "parameter": {},
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "mongodb",// Nama plugin.
            "parameter": {
                "datasource": "",// Nama sumber data.
                "column": [
                    {
                        "name": "_id",// Nama kolom.
                        "type": "ObjectId"// Tipe data. Jika replaceKey adalah _id, Anda harus mengatur type ke ObjectId. Jika Anda mengatur type ke string, penggantian akan gagal.
                    },
                    {
                        "name": "age",
                        "type": "int"
                    },
                    {
                        "name": "id",
                        "type": "long"
                    },
                    {
                        "name": "wealth",
                        "type": "double"
                    },
                    {
                        "name": "hobby",
                        "type": "array",
                        "splitter": " "
                    },
                    {
                        "name": "valid",
                        "type": "boolean"
                    },
                    {
                        "name": "date_of_join",
                        "format": "yyyy-MM-dd HH:mm:ss",
                        "type": "date"
                    }
                ],
                "writeMode": {// Mode penulisan.
                    "isReplace": "true",
                    "replaceKey": "_id"
                },
                "collectionName": "datax_test"// Nama koleksi.
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {// Jumlah catatan error.
            "record": "0"
        },
        "speed": {
            "throttle": true,// Menentukan apakah pembatasan kecepatan diaktifkan. Jika parameter ini diatur ke false, pembatasan kecepatan dinonaktifkan dan parameter mbps tidak berlaku. Jika diatur ke true, pembatasan kecepatan diaktifkan.
            "concurrent": 1,// Jumlah pekerjaan konkuren.
            "mbps": "1"// Laju pembatasan. 1 mbps = 1 MB/s.
        },
       "jvmOption": "-Xms1024m -Xmx1024m"
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}

Parameter skrip Writer

Parameter

Deskripsi

Wajib

Nilai default

datasource

Nama sumber data. Di editor kode, nilai parameter ini harus sama dengan nama sumber data yang ditambahkan.

Ya

Tidak ada

collectionName

Nama koleksi MongoDB.

Ya

Tidak ada

column

Array yang menentukan bidang dokumen yang akan ditulis ke MongoDB.

  • name: Nama kolom.

  • type: Tipe kolom.

    • int: Integer 32-bit.

    • string: String.

    • array: Parameter splitter wajib. Digunakan untuk memisahkan string sumber. Misalnya:

      Jika data sumber adalah a,b,c dan splitter diatur ke koma (,), data tersebut dipisah menjadi array ["a","b","c"] dan ditulis ke MongoDB.

      {"type":"array","name":"col_split_array","splitter":",","itemtype":"string"}
      Catatan

      Untuk tipe array, parameter itemtype mendukung tipe enumerasi berikut: double, int, long, bool, bytes, dan string.

    • json: String JSON.

    • long: Bilangan bulat panjang.

    • date: Tanggal.

    • double: Bilangan titik mengambang.

    Catatan

    MongoDB Writer juga mendukung penulisan tipe nested. Tambahkan awalan type document. untuk menunjukkan tipe nested. Anda dapat mengonfigurasi nama bertingkat untuk parameter name. Contoh:

    {"type":"document.string","name":"col_nest.col_string"}
    {"type":"document.array","name":"col_nest.col_split_array","splitter":",","itemtype":"string"}
  • splitter: Pemisah khusus. Gunakan parameter ini hanya ketika string perlu dipisah menjadi array karakter. String tersebut dipisah menjadi array menggunakan pemisah yang ditentukan dan disimpan di MongoDB.

Ya

Tidak ada

writeMode

Menentukan apakah data akan ditimpa selama transmisi. Terdiri dari isReplace dan replaceKey:

  • isReplace: Jika diatur ke true, operasi penimpaan dilakukan untuk replaceKey yang sama. Jika diatur ke false, tidak ada operasi penimpaan.

  • replaceKey: Menentukan kunci utama bisnis untuk setiap catatan, yang digunakan untuk penimpaan. replaceKey tidak mendukung beberapa kunci. Biasanya ini merujuk pada kunci utama di MongoDB.

Catatan

Jika isReplace diatur ke true dan bidang selain bidang _id dikonfigurasi sebagai replaceKey, error serupa berikut mungkin terjadi selama runtime:

After applying the update, the (immutable) field '_id' was found to have been altered to _id: "2"

Hal ini karena data yang akan ditulis berisi catatan di mana _id tidak sesuai dengan replaceKey. Untuk informasi lebih lanjut, lihat FAQ: Error: After applying the update, the (immutable) field '_id' was found to have been altered to _id: "2".

Tidak

Tidak ada

preSql

Operasi pra-eksekusi yang dijalankan sebelum menulis data ke MongoDB, seperti membersihkan data historis. Jika preSql kosong, tidak ada operasi pra-eksekusi yang dikonfigurasi. Saat Anda mengonfigurasi preSql, pastikan nilainya mematuhi sintaks JSON.

Tidak

Tidak ada

Saat Anda menjalankan pekerjaan Data Integration, preSql yang dikonfigurasi dieksekusi terlebih dahulu. Fase penulisan data aktual baru dimulai setelah eksekusi preSql selesai. Parameter preSql tidak memengaruhi konten data yang ditulis. Parameter preSql menyediakan eksekusi idempoten untuk Data Integration. Misalnya, preSql Anda dapat digunakan untuk membersihkan data historis sebelum setiap eksekusi tugas berdasarkan aturan bisnis Anda. Dalam kasus ini, jika tugas gagal, Anda cukup menjalankan ulang pekerjaan Data Integration.

Persyaratan format untuk preSql adalah sebagai berikut:

  • Anda harus mengonfigurasi field type untuk menentukan jenis operasi pra-eksekusi. Nilai yang didukung adalah drop dan remove. Contoh: "preSql":{"type":"remove"}.

    • drop: Menghapus koleksi dan datanya. Koleksi yang akan dihapus ditentukan oleh parameter collectionName.

    • remove: Menghapus data berdasarkan kondisi.

    • json: Anda dapat menggunakan objek JSON untuk menentukan kondisi penghapusan data. Contoh: "preSql":{"type":"remove", "json":"{'operationTime':{'$gte':ISODate('${last_day}T00:00:00.424+0800')}}"}. Dalam contoh ini, ${last_day} adalah parameter penjadwalan DataWorks dalam format $[yyyy-mm-dd]. Anda juga dapat menggunakan operator kondisional MongoDB lain yang didukung (seperti $gt, $lt, $gte, dan $lte), operator logika (seperti and dan or), atau fungsi (seperti max, min, sum, avg, dan ISODate) sesuai kebutuhan.

      Data Integration mengeksekusi penghapusan data menggunakan API MongoDB standar berikut:

      query=(BasicDBObject) com.mongodb.util.JSON.parse(json);        
      col.deleteMany(query);
      Catatan

      Untuk menghapus data berdasarkan kondisi, kami menyarankan agar Anda menggunakan konfigurasi JSON.

    • item: Anda dapat mengonfigurasi nama kolom (name), kondisi (condition), dan nilai kolom (value) untuk penyaringan data dalam item. Contoh: "preSql":{"type":"remove","item":[{"name":"pv","value":"100","condition":"$gt"},{"name":"pid","value":"10"}]}.

      Data Integration membuat kondisi kueri berdasarkan kondisi item yang dikonfigurasi, lalu mengeksekusi penghapusan menggunakan API MongoDB standar. Misalnya: col.deleteMany(query);.

  • Jika preSql tidak dikenali, tidak ada operasi pra-penghapusan yang dilakukan.