All Products
Search
Document Center

Data Transmission Service:Konfigurasikan\ ETL\ dalam\ tugas\ DTS

Last Updated:Mar 29, 2026

Saat mereplikasi data dengan Data Transmission Service (DTS), data sumber sering kali memerlukan transformasi sebelum mencapai tujuan—misalnya menyaring baris yang tidak relevan, menyembunyikan nilai sensitif, atau memperkaya setiap catatan dengan metadata seperti waktu perubahan. DTS menyediakan fitur extract, transform, and load (ETL) streaming yang menjalankan logika pemrosesan ini secara langsung antara mesin replikasi dan database tujuan. Logika ETL dinyatakan dalam bahasa domain-spesifik (DSL) yang dirancang khusus untuk skenario sinkronisasi data.

Kasus penggunaan umum:

  • Penyaringan data: Buang catatan yang tidak memenuhi kriteria sinkronisasi, seperti catatan dengan ID di atas ambang batas tertentu atau pesanan yang lebih lama dari tanggal batas.

  • Penyamaran data: Sembunyikan nilai sensitif, misalnya mengganti empat digit terakhir nomor telepon dengan tanda bintang.

  • Pelacakan perubahan: Tambahkan stempel waktu commit pada setiap baris yang disinkronkan agar tabel tujuan mencatat kapan data berubah.

  • Pencatatan audit: Tulis jenis operasi (INSERT, UPDATE, DELETE) dan waktu perubahan ke kolom khusus untuk kepatuhan atau debugging.

Cara kerja ETL

ETL dijalankan sebagai langkah pemrosesan antara mesin replikasi DTS dan database tujuan. Setiap catatan data masuk melewati skrip DSL Anda, yang dapat membuang catatan tersebut, mengubah nilai kolom, atau menambahkan kolom baru sebelum catatan ditulis ke tujuan.

DSL ini didasarkan pada sintaks pemrosesan data Simple Log Service (SLS). DSL mendukung logika kondisional, manipulasi string, operasi tanggal/waktu, aritmetika numerik, dan pemrosesan JSON. DSL tidak mendukung fungsi pemisahan event. DSL memiliki atribut-atribut berikut:

  • Kuat: Menyediakan banyak fungsi dan mendukung komposisi fungsi.

  • Sintaks relatif sederhana: Menyediakan contoh untuk skenario umum, seperti penyaringan data, transformasi data, dan penyamaran data.

  • Kinerja tinggi: Berbasis teknologi generasi kode, sehingga berdampak minimal terhadap proses sinkronisasi.

Nama kolom dalam skrip DSL diapit dengan backtick (` `), bukan tanda kutip tunggal (').

Database yang didukung

ETL tersedia untuk kombinasi database sumber dan tujuan berikut.

Database sumberDatabase tujuan
SQL ServerAnalyticDB for MySQL 3.0, SQL Server, MySQL, PolarDB for MySQL
MySQLAnalyticDB for MySQL 3.0, AnalyticDB for PostgreSQL, Kafka, ApsaraDB for ClickHouse cluster, MySQL, PolarDB for MySQL, Elasticsearch, Redis
Self-managed OracleAnalyticDB for MySQL 3.0, AnalyticDB for PostgreSQL, Kafka, MaxCompute, PolarDB-X 2.0, PolarDB for PostgreSQL (Compatible with Oracle)
PolarDB for MySQL
  • AnalyticDB for MySQL 3.0

  • MySQL

  • PolarDB for MySQL

PolarDB for PostgreSQL (Compatible with Oracle)AnalyticDB for MySQL 3.0, PolarDB for PostgreSQL (Compatible with Oracle)
PolarDB-X 1.0Kafka, Tablestore
PolarDB-X 2.0
  • PolarDB-X 2.0

  • AnalyticDB for MySQL 3.0

  • MySQL

  • PolarDB for MySQL

Self-managed Db2 for LUWMySQL
Self-managed Db2 for iMySQL
PolarDB for PostgreSQLPolarDB for PostgreSQL, PostgreSQL
PostgreSQLPolarDB for PostgreSQL, PostgreSQL
TiDBPolarDB for MySQL, MySQL, AnalyticDB for MySQL 3.0
MongoDBLindorm

Konfigurasikan ETL saat membuat tugas sinkronisasi

Topik ini menggunakan tugas sinkronisasi sebagai contoh. Langkah konfigurasi untuk tugas migrasi serupa.

Catatan penggunaan

BatasanKonsekuensi jika dilanggar
Skrip DSL bersifat case-sensitive. Nama database, tabel, dan bidang harus persis sesuai dengan sumber.Skrip gagal mencocokkan catatan tanpa pemberitahuan, atau tugas melaporkan error.
Semua bidang yang dirujuk dalam skrip DSL harus ada di database sumber dan tidak boleh difilter oleh kondisi filter.Tugas gagal dengan error field-not-found.
Skrip DSL hanya mendukung satu ekspresi tingkat atas. Gunakan e_compose untuk menggabungkan beberapa operasi.Tugas menolak skrip saat validasi.
Jika skrip DSL menambahkan kolom baru, tambahkan kolom tersebut ke tabel tujuan secara manual sebelum memulai tugas. Misalnya, jika skrip menggunakan e_set(new_column, dt_now()), tambahkan new_column ke tabel tujuan terlebih dahulu.Skrip ETL tidak berpengaruh karena kolom tujuan tidak ada.
Setelah pemrosesan DSL, perubahan DML untuk semua tabel harus menghasilkan informasi kolom yang konsisten. Misalnya, jika e_set menambahkan kolom, operasi INSERT, UPDATE, dan DELETE semuanya harus menghasilkan penambahan kolom tersebut.Tugas mungkin gagal karena inkonsistensi skema antar jenis operasi.
Skrip DSL hanya untuk transformasi dan pembersihan data.Pembuatan objek database (seperti CREATE TABLE) tidak didukung dan akan gagal.

Prosedur

  1. Buat tugas sinkronisasi. Untuk detailnya, lihat Solusi sinkronisasi.

  2. Pada langkah Advanced Configurations, atur Configure ETL ke Yes.

  3. Masukkan skrip DSL Anda di kotak teks berdasarkan sintaks DSL pemrosesan data.

    Untuk menyaring catatan di mana id lebih besar dari 3, gunakan e_if(op_gt(id, 3), e_drop()). Ini akan membuang catatan apa pun yang nilai id-nya melebihi 3, sehingga tidak disinkronkan ke tujuan.

    image

  4. Selesaikan langkah-langkah berikutnya sesuai kebutuhan.

Ubah konfigurasi ETL pada tugas sinkronisasi yang sudah ada

Untuk memperbarui konfigurasi ETL pada tugas sinkronisasi yang sudah ada, pilih salah satu opsi berikut:

  • Jika Configure ETL diatur ke No, ubah menjadi Yes dan masukkan skrip DSL.

  • Jika Configure ETL diatur ke Yes, modifikasi skrip DSL atau atur kembali Configure ETL ke No.

Penting
  • Sebelum memodifikasi skrip DSL, pindahkan objek sinkronisasi dari daftar Selected Objects kembali ke daftar Source Objects, lalu tambahkan kembali. Melewatkan langkah ini dapat menyebabkan tugas berada dalam keadaan tidak konsisten.

  • Konfigurasi ETL tidak dapat dimodifikasi untuk tugas migrasi. Hanya tugas sinkronisasi yang mendukung operasi ini.

Catatan penggunaan

BatasanKonsekuensi jika dilanggar
Memodifikasi konfigurasi ETL dapat mengganggu tugas yang sedang berjalan.Sinkronisasi data berhenti sementara selama pembaruan. Lakukan selama jendela pemeliharaan.
Perubahan hanya berlaku untuk data inkremental setelah tugas dimulai ulang. Data historis yang sudah disinkronkan tidak diproses ulang.Catatan yang disinkronkan sebelum modifikasi tidak terpengaruh—ini merupakan desain yang disengaja.
Perubahan skema tabel tujuan tidak didukung selama modifikasi ETL.Untuk mengubah skema, perbarui tabel tujuan sebelum memulai tugas sinkronisasi.
Batasan skrip DSL (case sensitivity, keberadaan bidang, ekspresi tunggal, kolom baru) sama seperti untuk tugas baru.Konsekuensinya sama seperti yang dijelaskan dalam catatan penggunaan tugas baru di atas.

Prosedur

  1. Masuk ke atau halaman Tugas Sinkronisasi Data di konsol DTS baru.

  2. Pada baris tugas sinkronisasi target, klik ikon 点点点 dan pilih Modify ETL Configurations.

  3. Pada langkah Advanced Configurations, atur Configure ETL ke Yes.

  4. Masukkan skrip DSL yang diperbarui di kotak teks.

    Untuk menyaring catatan di mana id lebih besar dari 3, gunakan e_if(op_gt(id, 3), e_drop()). Ini akan membuang catatan apa pun yang nilai id-nya melebihi 3, sehingga tidak disinkronkan ke tujuan.

    image

  5. Selesaikan langkah-langkah berikutnya sesuai kebutuhan.

Contoh skrip ETL

Contoh berikut mencakup skenario paling umum. Masing-masing menggunakan fungsi DSL yang dijelaskan di bagian referensi sintaks DSL.

Penyaringan data

Gunakan penyaringan data untuk menyinkronkan hanya subset catatan—misalnya mereplikasi pesanan terbaru ke database analitik, mengecualikan data uji dari sinkronisasi produksi, atau menerapkan aturan residensi data berbasis wilayah dengan membuang catatan yang tidak relevan.

  • Buang catatan di mana id > 10000:

    e_if(op_gt(`id`, 10000), e_drop())
  • Buang catatan di mana name mengandung "hangzhou":

    e_if(str_contains(`name`, "hangzhou"), e_drop())
  • Buang pesanan yang dibuat sebelum tanggal batas:

    e_if(op_lt(`order_timestamp`, "2015-02-23 23:54:55"), e_drop())
  • Buang catatan yang memenuhi beberapa kondisi (AND):

    e_if(op_and(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop())
  • Buang catatan yang memenuhi salah satu kondisi (OR):

    e_if(op_or(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop())

Penyamaran data

Gunakan penyamaran data ketika database tujuan diakses oleh audiens yang lebih luas daripada sumber—misalnya saat menyinkronkan data produksi ke sistem pelaporan atau berbagi data dengan pihak ketiga. Penyamaran memungkinkan Anda melindungi informasi identitas pribadi (PII) sekaligus mempertahankan data untuk analitik.

Ganti empat digit terakhir nomor telepon (posisi 7–10) dengan tanda bintang:

e_set(`phone`, str_mask(`phone`, 7, 10, '*'))

Pelacakan perubahan

Gunakan pelacakan perubahan ketika konsumen downstream perlu mengetahui kapan baris terakhir dimodifikasi—misalnya untuk mengimplementasikan pipeline pemrosesan inkremental, mendeteksi catatan kedaluwarsa, atau mengaudit kesegaran data tanpa mengkueri database sumber.

Penting

Sebelum memulai tugas, tambahkan kolom dts_sync_time ke tabel tujuan.

Tambahkan kolom dts_sync_time ke semua tabel untuk operasi INSERT, UPDATE, dan DELETE:

e_if(op_or(op_or(
        op_eq(__OPERATION__, __OP_INSERT__),
        op_eq(__OPERATION__, __OP_UPDATE__)),
        op_eq(__OPERATION__, __OP_DELETE__)),
    e_set(dts_sync_time, __COMMIT_TIMESTAMP__))

Untuk menerapkan ini hanya pada tabel tertentu (misalnya, dts_test_table):

e_if(op_and(
      op_eq(__TB__,'dts_test_table'),
      op_or(op_or(
        op_eq(__OPERATION__,__OP_INSERT__),
        op_eq(__OPERATION__,__OP_UPDATE__)),
        op_eq(__OPERATION__,__OP_DELETE__))),
      e_set(dts_sync_time,__COMMIT_TIMESTAMP__))

Pencatatan audit

Gunakan pencatatan audit ketika Anda memerlukan riwayat lengkap perubahan data di tabel tujuan—misalnya untuk memenuhi persyaratan kepatuhan, mendukung skenario rollback, atau membangun log perubahan tanpa sistem audit terpisah. Pola ini menulis setiap perubahan masuk sebagai INSERT, sehingga tabel tujuan mengumpulkan catatan lengkap semua modifikasi.

Penting

Sebelum memulai tugas, tambahkan kolom operation_type dan updated ke tabel tujuan.

Tulis jenis operasi DML dan stempel waktu commit ke baris tujuan, lalu ubah semua operasi menjadi INSERT:

e_compose(
    e_switch(
        op_eq(__OPERATION__,__OP_DELETE__), e_set(operation_type, 'DELETE'),
        op_eq(__OPERATION__,__OP_UPDATE__), e_set(operation_type, 'UPDATE'),
        op_eq(__OPERATION__,__OP_INSERT__), e_set(operation_type, 'INSERT')),
    e_set(updated, __COMMIT_TIMESTAMP__),
    e_set(__OPERATION__,__OP_INSERT__)
)

Membedakan data penuh dan inkremental

Gunakan pola ini ketika tabel tujuan menerima data migrasi penuh dan perubahan inkremental, serta konsumen downstream perlu membedakannya—misalnya untuk melewatkan pemrosesan ulang baris historis dalam pipeline streaming, atau memvalidasi bahwa muatan awal telah selesai sebelum menerapkan logika inkremental.

Selama migrasi penuh, __COMMIT_TIMESTAMP__ bernilai 0 (1970-01-01 08:00:00, disesuaikan dengan zona waktu lokal). Selama migrasi inkremental, nilainya adalah waktu commit log aktual. Skrip berikut menulis True atau False ke kolom is_increment_dml:

e_if_else(__COMMIT_TIMESTAMP__ > DATETIME('2000-01-01 00:00:00'),
    e_set(`is_increment_dml`, True),
    e_set(`is_increment_dml`, False)
)

Referensi sintaks DSL

Variabel bawaan

Variabel bawaan berikut tersedia di semua skrip DSL.

VariabelDeskripsiTipe dataNilai contoh
__TB__Nama tabelstringtable
__DB__Nama databasestringmydb
__OPERATION__Jenis operasi DMLstring__OP_INSERT__, __OP_UPDATE__, __OP_DELETE__
__BEFORE__Gambar sebelum UPDATE (nilai sebelum perubahan). Operasi DELETE hanya memiliki gambar sebelum.Tanda khususv(column_name,__BEFORE__)
__AFTER__Gambar setelah UPDATE (nilai setelah perubahan). Operasi INSERT hanya memiliki gambar setelah.Tanda khususv(column_name,__AFTER__)
__COMMIT_TIMESTAMP__Waktu commit transaksidatetime'2021-01-01 10:10:01'
` column `Nilai kolom yang ditentukan dalam catatan saat inistring` id , name `

Konstanta

TipeContoh
int123
float123.4
string"hello1_world"
booleantrue atau false
datetimeDATETIME('2021-01-01 10:10:01')

Fungsi ekspresi

Operasi numerik

OperasiSintaksParameterNilai kembalianContoh
Penjumlahanop_sum(value1, value2)integer atau floatInteger jika kedua input integer; selain itu floatop_sum(col1, 1.0)
Penguranganop_sub(value1, value2)integer atau floatInteger jika kedua input integer; selain itu floatop_sub(col1, 1.0)
Perkalianop_mul(value1, value2)integer atau floatInteger jika kedua input integer; selain itu floatop_mul(col1, 1.0)
Pembagianop_div_true(value1, value2)integer atau floatInteger jika kedua input integer; selain itu floatop_div_true(col1, 2.0) — jika col1=15, mengembalikan 7.5
Moduloop_mod(value1, value2)integer atau floatInteger jika kedua input integer; selain itu floatop_mod(col1, 10) — jika col1=23, mengembalikan 3

Operasi logika

OperasiSintaksParameterNilai kembalianContoh
Sama denganop_eq(value1, value2)integer, float, atau stringbooleanop_eq(col1, 23)
Lebih besar dariop_gt(value1, value2)integer, float, atau stringbooleanop_gt(col1, 1.0)
Lebih kecil dariop_lt(value1, value2)integer, float, atau stringbooleanop_lt(col1, 1.0)
Lebih besar dari atau sama denganop_ge(value1, value2)integer, float, atau stringbooleanop_ge(col1, 1.0)
Lebih kecil dari atau sama denganop_le(value1, value2)integer, float, atau stringbooleanop_le(col1, 1.0)
ANDop_and(value1, value2)booleanbooleanop_and(is_male, is_student)
ORop_or(value1, value2)booleanbooleanop_or(is_male, is_student)
INop_in(value, json_array)tipe apa pun; string array JSONbooleanop_in(id,json_array('["0","1","2","3"]'))
Is nullop_is_null(value)tipe apa punbooleanop_is_null(name)
Is not nullop_is_not_null(value)tipe apa punbooleanop_is_not_null(name)

Fungsi string

OperasiSintaksParameterNilai kembalianContoh
Menggabungkan stringop_add(str_1, str_2, ..., str_n)stringString gabunganop_add(col,'hangzhou','dts')
Format dan gabungkanstr_format(format, value1, value2, ...)format: string dengan placeholder {}; nilai: apa punString terformatstr_format("part1: {}, part2: {}", col1, col2) — jika col1="ab" dan col2="12", mengembalikan "part1: ab, part2: 12"
Ganti substringstr_replace(original, oldStr, newStr, count)count: jumlah maksimum penggantian; -1 mengganti semuaString setelah penggantianstr_replace(name, "a", 'b', -1) — jika name="aba", mengembalikan "bbb"
Ganti di semua bidang bertipe stringtail_replace_string_field(search, replace, all)all: harus trueString setelah penggantiantail_replace_string_field('\u000f','',true) — mengganti \u000f dengan string kosong di semua bidang varchar, text, dan char
Hapus karakter dari kedua ujungstr_strip(string_val, charSet)charSet: karakter yang akan dihapusString setelah di-stripstr_strip(name, 'ab') — jika name="axbzb", mengembalikan "xbz"
Huruf kecilstr_lower(value)stringString huruf kecilstr_lower(str_col)
Huruf besarstr_upper(value)stringString huruf besarstr_upper(str_col)
String ke integercast_string_to_long(value)stringIntegercast_string_to_long(col)
Integer ke stringcast_long_to_string(value)integerStringcast_long_to_string(col)
Hitung kemunculan substringstr_count(str, pattern)string; substringIntegerstr_count(str_col, 'abc') — jika str_col="zabcyabcz", mengembalikan 2
Temukan posisi substringstr_find(str, pattern)string; substringPosisi kecocokan pertama; -1 jika tidak ditemukanstr_find(str_col, 'abc') — jika str_col="xabcy", mengembalikan 1
Periksa apakah alfabetstr_isalpha(str)stringbooleanstr_isalpha(str_col)
Periksa apakah numerikstr_isdigit(str)stringbooleanstr_isdigit(str_col)
Pencocokan ekspresi regulerregex_match(str, regex)string; string regexbooleanregex_match(__TB__,'user_\\\d+')
Menyamarkan substringstr_mask(str, start, end, maskStr)start min: 0; end maks: panjang−1; maskStr: satu karakterString yang disamarkanstr_mask(phone, 7, 10, '#')
Substring setelah penandasubstring_after(str, cond)string; string penandaString setelah penanda (penanda tidak termasuk)substring_after(col, 'abc')
Substring sebelum penandasubstring_before(str, cond)string; string penandaString sebelum penanda (penanda tidak termasuk)substring_before(col, 'efg')
Substring di antara dua penandasubstring_between(str, cond1, cond2)string; dua string penandaString di antara penanda (penanda tidak termasuk)substring_between(col, 'abc','efg')
Periksa apakah nilai bertipe stringis_string_value(value)string atau nama kolombooleanis_string_value(col1)
Mendapatkan bidang dokumen MongoDBbson_value("field1", "field2", ...)nama bidang di setiap levelNilai bidange_set(user_name, bson_value("person","name"))

Fungsi waktu

OperasiSintaksParameterNilai kembalianContoh
Waktu sistem saat ini (presisi detik)dt_now()Tidak adadatetimedt_now()
Waktu sistem saat ini (presisi milidetik)dt_now_millis()Tidak adadatetimedt_now_millis()
Timestamp UTC (detik) ke datetimedt_fromtimestamp(value, [timezone])integer; zona waktu opsionaldatetime (presisi detik)dt_fromtimestamp(1626837629,'GMT+08')
Timestamp UTC (milidetik) ke datetimedt_fromtimestamp_millis(value, [timezone])integer; zona waktu opsionaldatetime (presisi milidetik)dt_fromtimestamp_millis(1626837629123,'GMT+08')
Datetime ke timestamp UTC (detik)dt_parsetimestamp(value, [timezone])datetime; zona waktu opsionalIntegerdt_parsetimestamp(datetime_col,'GMT+08')
Datetime ke timestamp UTC (milidetik)dt_parsetimestamp_millis(value, [timezone])datetime; zona waktu opsionalIntegerdt_parsetimestamp_millis(datetime_col,'GMT+08')
Datetime ke stringdt_str(value, format)datetime; string formatStringdt_str(col1, 'yyyy-MM-dd HH:mm:ss')
String ke datetimedt_strptime(value, format)string; string formatdatetimedt_strptime('2021-07-21 03:20:29', 'yyyy-MM-dd hh:mm:ss')
Tambah atau kurangi satuan waktudt_add(value, [years=n], [months=n], [days=n], [hours=n], [minutes=n])datetime; offset integer (negatif untuk pengurangan)datetimedt_add(datetime_col, years=-1)

Ekspresi kondisional

SintaksDeskripsiContoh
(cond ? val_1 : val_2)Operator ternary. Mengembalikan val_1 jika cond bernilai true; selain itu val_2. val_1 dan val_2 harus bertipe sama.(id>1000 ? 1 : 0)

Fungsi JSON

Tipe value merepresentasikan tipe bidang apa pun di database.
OperasiSintaksParameterNilai kembalianContoh
Konversi string array JSON ke himpunanjson_array(arrayText) — hanya dapat digunakan dalam ekspresi booleanarrayText: string array JSONKoleksi himpunanop_in(id,json_array('["0","1","2","3"]'))
Buat array JSONjson_array2(item...)item bertipe apa punArray JSONjson_array2("0","1","2","3") mengembalikan ["0","1","2","3"]
Buat objek JSONjson_object(item...)pasangan kunci-nilai (kunci bertipe string, nilai bertipe apa pun)JSONjson_object('name','ZhangSan','age',32,'loginId',100) mengembalikan {"name":"ZhangSan","age":32,"loginId":100}
Sisipkan ke array JSON pada posisi tertentujson_array_insert(json, kvPairs...)Posisi JSONPath; data yang akan disisipkan. Jika posisi tidak ada, mengembalikan JSON asli. Jika elemen tidak ada, menambahkan ke akhir array.JSONjson_array_insert('{"Address":["City",1]}','$.Address[3]',100) mengembalikan {"Address":["City",1,100]}
Sisipkan ke objek JSON (hanya jika belum ada)json_insert(json, kvPairs...)Posisi JSONPath; data yang akan disisipkan. Jika posisi sudah ada, mengembalikan JSON asli.JSONjson_insert('{"Address":["City","Xian","Number",1]}','$.ID',100) mengembalikan {"Address":["City","Xian","Number",1],"ID":100}
Sisipkan atau perbarui pada path JSONjson_set(json, kvPairs...)Posisi JSONPath; data. Memperbarui jika posisi ada; menyisipkan jika belum ada.tipe valuejson_set('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100) mengembalikan {"ID":1,"Address":["City","Xian","Number",1],"IP":100}
Sisipkan atau perbarui pasangan kunci-nilaijson_put(json, key, value)Objek JSON; string kunci; nilai. Mengembalikan null jika json bukan objek JSON.JSONjson_put('{"loginId":100}','loginTime','2024-10-10') mengembalikan {"loginId":100,"loginTime":"2024-10-10"}
Ganti pada path JSONjson_replace(json, kvPairs...)Posisi JSONPath; data pengganti. Jika posisi tidak ada, mengembalikan JSON asli.tipe valuejson_replace('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100) mengembalikan JSON asli (posisi tidak ada)
Periksa apakah nilai ada pada path JSONjson_contains(json, jsonPath, item)Objek JSON; JSONPath; data yang akan diperiksabooleanjson_contains('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID',1) mengembalikan true
Periksa apakah path JSON adajson_contains_path(json, jsonPath)Objek JSON; JSONPathbooleanjson_contains_path('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID') mengembalikan true
Dapatkan nilai pada path JSONjson_extract(json, jsonPath)Objek JSON; JSONPathtipe nilaijson_extract('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID') mengembalikan 1
Dapatkan nilai berdasarkan nama kuncijson_get(json, key)Objek JSON; string kuncitipe valuejson_get('{"ID":1,"Address":["City","Xian","Number",1]}','ID') mengembalikan 1
Dapatkan semua kunci pada path JSONjson_keys(json, jsonPath)Objek JSON; JSONPathArray JSONjson_keys('{"ID":1,"Address":["City","Xian","Number",1]}','$') mengembalikan ["ID","Address"]
Dapatkan jumlah kunci pada path JSONjson_length(json, jsonPath)Objek JSON; JSONPath ("$" setara dengan json_length(json))Integerjson_length('{"ID":1,"Address":["City","Xian","Number",1]}','$') mengembalikan 2
Dapatkan jumlah kunci rootjson_length(json)Objek JSONIntegerjson_length('{"ID":1,"Address":["City","Xian","Number",1]}') mengembalikan 2
Parsing string JSONjson_parse(json)String JSONtipe valuejson_parse('{"ID":1}') mengembalikan {"ID":1}
Hapus nilai pada path JSONjson_remove(json, jsonPath)Objek JSON; JSONPathJSONjson_remove('{"loginId":100,"loginTime":"2024-10-10"}','$.loginTime') mengembalikan {"loginId":100}

Fungsi global

Fungsi kontrol alur

FungsiSintaksDeskripsiContoh
Ife_if(bool_expr, func_invoke)Menjalankan func_invoke jika bool_expr bernilai true.e_if(op_gt(id, 10), e_drop()) — membuang catatan di mana id > 10
If-elsee_if_else(bool_expr, func_invoke1, func_invoke2)Menjalankan func_invoke1 jika true; menjalankan func_invoke2 jika false.e_if_else(op_gt(id, 10), e_set(tag, 'large'), e_set(tag, 'small'))
Switche_switch(condition1, func1, condition2, func2, ..., default=default_func)Mengevaluasi kondisi secara berurutan dan menjalankan yang pertama cocok. Menjalankan default_func jika tidak ada yang cocok.e_switch(op_gt(id, 100), e_set(str_col, '>100'), op_gt(id, 90), e_set(str_col, '>90'), default=e_set(str_col, '<=90'))
Composee_compose(func1, func2, func3, ...)Menjalankan beberapa fungsi secara berurutan sebagai satu ekspresi.e_compose(e_set(str_col, 'test'), e_set(dt_col, dt_now())) — mengatur dua kolom dalam satu ekspresi

Fungsi manipulasi data

FungsiSintaksDeskripsiContoh
Buang catatane_drop()Membuang catatan saat ini. Catatan tidak ditulis ke tujuan.e_if(op_gt(id, 10), e_drop())
Simpan catatane_keep(condition)Menyimpan catatan hanya jika condition bernilai true.e_keep(op_gt(id, 1)) — hanya menyinkronkan catatan di mana id > 1
Atur nilai kolome_set(col, val, NEW)Mengatur col ke val. Tambahkan NEW (tanpa koma di depan) untuk mengonversi kolom ke tipe data val. Abaikan NEW dan pastikan kompatibilitas tipe; ketidakcocokan dapat menyebabkan tugas gagal.e_set(col1, 1, NEW) — mengonversi col1 ke tipe numerik dan mengaturnya ke 1
Pemetaan bidang MongoDBe_expand_bson_value('*', 'fieldA', {"fieldB":"fieldC"})Memilih bidang yang akan disimpan (* = semua), membuang fieldA, dan mengganti nama fieldB menjadi fieldC. Pemetaan nama bidang bersifat opsional.e_expand_bson_value("*", "_id,name") — menulis semua bidang kecuali _id dan name ke tujuan

Langkah selanjutnya