Data Transmission Service (DTS) mendukung pemrosesan ETL (extract, transform, and load) berbasis aliran dalam tugas migrasi dan sinkronisasi. Anda dapat mengonfigurasi ETL untuk menyaring data, menyamarkan bidang sensitif, mencatat stempel waktu modifikasi, serta mengaudit perubahan data menggunakan bahasa skrip DSL.
Informasi latar belakang
Saat Anda perlu mentransformasi atau menyaring data real-time sebelum menuliskannya ke database tujuan, gunakan fitur ETL berbasis aliran DTS. Logika ETL didefinisikan melalui bahasa skrip domain-spesifik (DSL). Untuk ikhtisar DSL dan sintaksnya, lihat Pengenalan sintaks DSL pemrosesan data.
DTS mendukung konfigurasi ETL dengan dua cara:
Baik tugas migrasi DTS maupun tugas sinkronisasi mendukung konfigurasi ETL. Topik ini menggunakan tugas sinkronisasi sebagai contoh. Metode konfigurasi untuk tugas migrasi serupa.
Database yang didukung
Tabel berikut mencantumkan database sumber dan tujuan yang didukung untuk ETL.
Source database | Destination database |
SQL Server |
|
MySQL |
|
Self-managed Oracle |
|
PolarDB for MySQL |
|
PolarDB for PostgreSQL (Compatible with Oracle) |
|
PolarDB-X 1.0 |
|
PolarDB-X 2.0 |
|
Self-managed Db2 for LUW | MySQL |
Self-managed Db2 for i | MySQL |
PolarDB for PostgreSQL |
|
PostgreSQL |
|
TiDB |
|
MongoDB | Lindorm |
Konfigurasikan ETL saat membuat tugas sinkronisasi
Catatan
Jika skrip ETL Anda menambahkan kolom baru, tambahkan secara manual kolom tersebut ke database tujuan. Jika tidak, skrip ETL tidak akan berlaku. Misalnya, dalam
e_set(`new_column`, dt_now()), Anda harus menambahkan secara manualnew_columnke database tujuan.Skrip DSL hanya menangani operasi transformasi dan pembersihan data. Skrip ini tidak mendukung pembuatan objek database.
Bidang yang dirujuk dalam skrip DSL harus ada di database sumber dan tidak boleh difilter oleh kondisi filter apa pun. Jika tidak, tugas mungkin gagal.
Skrip DSL bersifat case-sensitive. Nama database, nama tabel, dan nama bidang harus persis sama dengan yang ada di database sumber.
Skrip DSL tidak mendukung beberapa ekspresi. Gunakan fungsi
e_composeuntuk menggabungkan beberapa ekspresi menjadi satu.Semua perubahan DML dari semua tabel di database sumber harus menghasilkan informasi kolom yang identik setelah pemrosesan DSL. Jika tidak, tugas mungkin gagal. Misalnya, jika Anda menggunakan fungsi
e_setuntuk menambahkan kolom, pastikan operasi INSERT, UPDATE, dan DELETE dari database sumber semuanya menghasilkan kolom tambahan yang sama di tabel tujuan. Untuk informasi lebih lanjut, lihat Catat waktu modifikasi data.
Prosedur
Buat tugas sinkronisasi. Untuk detailnya, lihat Ikhtisar solusi sinkronisasi.
Pada langkah Advanced Configurations, atur Configure ETL ke Yes.
Di kotak input, masukkan pernyataan ETL Anda menggunakan sintaks DSL pemrosesan data.
CatatanSebagai contoh, untuk menghapus catatan di mana id lebih besar dari 3, gunakan
e_if(op_gt(`id`, 3), e_drop()). Di sini,op_gtadalah fungsi ekspresi yang memeriksa apakah suatu nilai lebih besar dari nilai lain, danidadalah variabel. Skrip ini menyaring catatan di mana id > 3.Selesaikan langkah-langkah tersisa sesuai kebutuhan.
Ubah konfigurasi ETL pada tugas sinkronisasi yang sudah ada
Mengubah konfigurasi ETL pada tugas sinkronisasi yang sudah ada mencakup:
Jika Anda memiliki tugas sinkronisasi yang belum dikonfigurasi ETL—artinya saat membuat tugas sinkronisasi, Configure ETL diatur ke No—Anda dapat mengubah No menjadi Yes dan mengonfigurasi skrip DSL.
Jika ETL sudah dikonfigurasi, Anda dapat mengubah skrip DSL yang ada atau mengatur Configure ETL ke No.
PentingUntuk mengubah skrip DSL yang ada, pertama-tama pindahkan objek sinkronisasi dari Selected Objects kembali ke Source Objects, lalu tambahkan kembali ke Selected Objects sebelum mengedit skrip DSL.
Tugas migrasi tidak mendukung pengubahan skrip DSL.
Catatan
Mengubah konfigurasi ETL pada tugas sinkronisasi yang sudah ada tidak mendukung perubahan skema tabel di database tujuan. Untuk mengubah skema, lakukan di database tujuan sebelum memulai tugas sinkronisasi.
Mengubah konfigurasi ETL dapat mengganggu tautan data. Lakukan dengan hati-hati.
Perubahan konfigurasi ETL hanya berlaku untuk data inkremental yang diproses setelah tugas dimulai ulang. Perubahan ini tidak memengaruhi data historis yang telah diproses sebelumnya.
Skrip DSL hanya menangani operasi transformasi dan pembersihan data. Skrip ini tidak mendukung pembuatan objek database.
Bidang yang dirujuk dalam skrip DSL harus ada di database sumber dan tidak boleh difilter oleh kondisi filter apa pun. Jika tidak, tugas mungkin gagal.
Skrip DSL bersifat case-sensitive. Nama database, nama tabel, dan nama bidang harus persis sama dengan yang ada di database sumber.
Skrip DSL tidak mendukung beberapa ekspresi. Gunakan fungsi
e_composeuntuk menggabungkan beberapa ekspresi menjadi satu.Semua perubahan DML dari semua tabel di database sumber harus menghasilkan informasi kolom yang identik setelah pemrosesan DSL. Jika tidak, tugas mungkin gagal. Misalnya, jika Anda menggunakan fungsi
e_setuntuk menambahkan kolom, pastikan operasi INSERT, UPDATE, dan DELETE dari database sumber semuanya menghasilkan kolom tambahan yang sama di tabel tujuan. Untuk informasi lebih lanjut, lihat Catat waktu modifikasi data.
Prosedur
Pada tugas sinkronisasi target, klik
dan pilih Modify ETL Configurations.Pada langkah Advanced Configurations, atur Configure ETL ke Yes.
Di kotak input, masukkan pernyataan ETL Anda menggunakan sintaks DSL pemrosesan data.
CatatanSebagai contoh, untuk menghapus catatan di mana id lebih besar dari 3, gunakan
e_if(op_gt(`id`, 3), e_drop()). Di sini,op_gtadalah fungsi ekspresi yang memeriksa apakah suatu nilai lebih besar dari nilai lain, danidadalah variabel. Skrip ini menyaring catatan di mana id > 3.Selesaikan langkah-langkah tersisa sesuai kebutuhan.
Pengenalan sintaks DSL pemrosesan data
DSL pemrosesan data adalah bahasa skrip untuk mendefinisikan logika ETL dalam skenario sinkronisasi DTS. DSL ini mendukung fungsi kondisional dan menangani string, tanggal, serta nilai numerik dengan fitur-fitur berikut:
Fungsionalitas kuat: Menyediakan banyak fungsi dan mendukung komposisi fungsi.
Sintaks relatif sederhana: Menyertakan contoh untuk skenario umum seperti penyaringan data, transformasi, dan penyamaran. Untuk detailnya, lihat Contoh skenario khas.
Efisiensi eksekusi tinggi: Menggunakan teknologi generasi kode untuk meminimalkan dampak performa pada proses sinkronisasi.
Dalam sintaks DSL, nama kolom menggunakan backtick (``), bukan tanda kutip tunggal ('').
Produk ini merujuk sintaks pemrosesan data SLS. Produk ini mendukung fungsi JSON tetapi tidak mendukung fungsi pemisahan event. Untuk sintaks SLS, lihat Pengenalan sintaks.
Contoh skenario khas
Penyaringan data
Filter berdasarkan kolom numerik: Hapus catatan di mana id > 10000 agar tidak disinkronkan: e_if(op_gt(`id`, 10000), e_drop()).
Filter berdasarkan kecocokan string: Hapus catatan di mana name mengandung "hangzhou": e_if(str_contains(`name`, "hangzhou"), e_drop()).
Filter berdasarkan tanggal: Jangan sinkronkan catatan di mana order_timestamp lebih awal dari waktu tertentu: e_if(op_lt(`order_timestamp`, "2015-02-23 23:54:55"), e_drop()).
Filter berdasarkan beberapa kondisi:
Hapus catatan di mana id > 1000 dan name mengandung "hangzhou": e_if(op_and(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop()).
Hapus catatan di mana id > 1000 atau name mengandung "hangzhou": e_if(op_or(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop()).
Penyamaran data
Penyamaran: Ganti empat digit terakhir kolom nomor telepon dengan tanda bintang: e_set(`phone`, str_mask(`phone`, 7, 10, '*')).
Catat waktu modifikasi data
Tambahkan kolom ke semua tabel: Saat __OPERATION__ adalah INSERT, UPDATE, atau DELETE, tambahkan kolom bernama "dts_sync_time" dengan nilai stempel waktu commit log (__COMMIT_TIMESTAMP__).
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__))Tambahkan kolom ke tabel tertentu "dts_test_table": Saat __OPERATION__ adalah INSERT, UPDATE, atau DELETE, tambahkan kolom bernama "dts_sync_time" dengan nilai stempel waktu commit log (__COMMIT_TIMESTAMP__).
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__))CatatanAnda harus menambahkan secara manual kolom "dts_sync_time" ke tabel tujuan sebelum memulai tugas.
Audit perubahan data
Catat jenis dan waktu perubahan data: Tulis jenis perubahan ke kolom "operation_type" dan stempel waktu perubahan ke kolom "updated" di database tujuan.
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__)
)Anda harus menambahkan kolom "operation_type" dan "updated" ke tabel tujuan sebelum memulai tugas.
Membedakan antara data penuh dan data inkremental
Catat apakah data berasal dari migrasi penuh atau inkremental di kolom is_increment_dml. Anda dapat membedakan antara migrasi penuh dan inkremental dengan memeriksa nilai __COMMIT_TIMESTAMP__. Dalam migrasi penuh, __COMMIT_TIMESTAMP__ bernilai 0 (1970-01-01 08:00:00, dipengaruhi zona waktu). Dalam migrasi inkremental, nilainya mencerminkan waktu penulisan log database sumber. Skrip ETL yang sesuai adalah:
e_if_else(__COMMIT_TIMESTAMP__ > DATETIME('2000-01-01 00:00:00'),
e_set(`is_increment_dml`, True),
e_set(`is_increment_dml`, False)
)Sintaks DSL pemrosesan data
Konstanta dan variabel
Konstanta
Type
Example
int
123
float
123.4
string
"hello1_world"
boolean
true or false
datetime
DATETIME('2021-01-01 10:10:01')
Variabel
Variable
Description
Data type
Example value
__TB__
Table name
string
table
__DB__
Database name
string
mydb
__OPERATION__
Operation type
string
__OP_INSERT__, __OP_UPDATE__, __OP_DELETE__
__BEFORE__
Nilai pre-image untuk operasi UPDATE (nilai sebelum perubahan)
CatatanOperasi DELETE hanya memiliki nilai pre-image.
Special marker, no type
v(`column_name`,__BEFORE__)
__AFTER__
Nilai post-image untuk operasi UPDATE (nilai setelah perubahan)
CatatanOperasi INSERT hanya memiliki nilai post-image.
Special marker, no type
v(`column_name`,__AFTER__)
__COMMIT_TIMESTAMP__
Waktu commit transaksi
datetime
'2021-01-01 10:10:01'
`column`
Nilai kolom yang ditentukan untuk suatu catatan
string
`id`, `name`
Fungsi ekspresi
Operasi numerik
Function
Syntax
Value range
Return value
Example
Addition
op_sum(value1, value2)
value1: integer atau bilangan titik mengambang
value2: integer atau bilangan titik mengambang
Mengembalikan integer jika kedua parameter integer; jika tidak, mengembalikan bilangan titik mengambang.
op_sum(`col1`, 1.0)
Subtraction
op_sub(value1, value2)
value1: integer atau bilangan titik mengambang
value2: integer atau bilangan titik mengambang
Mengembalikan integer jika kedua parameter integer; jika tidak, mengembalikan bilangan titik mengambang.
op_sub(`col1`, 1.0)
Multiplication
op_mul(value1, value2)
value1: integer atau bilangan titik mengambang
value2: integer atau bilangan titik mengambang
Mengembalikan integer jika kedua parameter integer; jika tidak, mengembalikan bilangan titik mengambang.
op_mul(`col1`, 1.0)
Division
op_div_true(value1, value2)
value1: integer atau bilangan titik mengambang
value2: integer atau bilangan titik mengambang
Mengembalikan integer jika kedua parameter integer; jika tidak, mengembalikan bilangan titik mengambang.
op_div_true(`col1`, 2.0); jika col1=15, mengembalikan 7.5.
Modulo operation
op_mod(value1, value2)
value1: integer atau bilangan titik mengambang
value2: integer atau bilangan titik mengambang
Mengembalikan integer jika kedua parameter integer; jika tidak, mengembalikan bilangan titik mengambang.
op_mod(`col1`, 10); jika col1=23, mengembalikan 3.
Operasi logis
Function
Syntax
Valid values
Return value
Example
Equality check
op_eq(value1, value2)
value1: integer, bilangan titik mengambang, atau string
value2: integer, bilangan titik mengambang, atau string
Boolean: true atau false
op_eq(`col1`, 23)
Greater-than check
op_gt(value1, value2)
value1: integer, bilangan titik mengambang, atau string
value2: integer, bilangan titik mengambang, atau string
Boolean: true atau false
op_gt(`col1`, 1.0)
is less than
op_lt(value1, value2)
value1: integer, bilangan titik mengambang, atau string
value2: integer, bilangan titik mengambang, atau string
Boolean: true atau false
op_lt(`col1`, 1.0)
Greater-than-or-equal check
op_ge(value1, value2)
value1: integer, bilangan titik mengambang, atau string
value2: integer, bilangan titik mengambang, atau string
Boolean: true atau false
op_ge(`col1`, 1.0)
Less-than-or-equal check
op_le(value1, value2)
value1: integer, bilangan titik mengambang, atau string
value2: integer, bilangan titik mengambang, atau string
Boolean: true atau false
op_le(`col1`, 1.0)
AND operation
op_and(value1, value2)
value1: boolean
value2: boolean
Boolean: true atau false
op_and(`is_male`, `is_student`)
OR operation
op_or(value1, value2)
value1: boolean
value2: boolean
Boolean: true atau false
op_or(`is_male`, `is_student`)
IN operation
op_in(value, json_array)
value: tipe apa pun
json_array: string berformat JSON
Boolean: true atau false
op_in(`id`,json_array('["0","1","2","3","4","5","6","7","8"]'))
Check if value is null
op_is_null(value)
value: tipe apa pun
Boolean: true atau false
op_is_null(`name`)
Check if value is not null
op_is_not_null(value)
value: tipe apa pun
Boolean: true atau false
op_is_not_null(`name`)
Fungsi string
Function
Syntax
Value range
Return value
Example
String concatenation
op_add(str_1,str_2,...,str_n)
str_1: string
str_2: string
...
str_n: string
String hasil penggabungan
op_add(`col`,'hangzhou','dts')
String formatting and concatenation
str_format(format, value1, value2, value3, ...)
format: string dengan placeholder berupa kurung kurawal, seperti "part1: {}, part2: {}"
value1: tipe apa pun
value2: tipe apa pun
String terformat
str_format("part1: {}, part2: {}", `col1`, `col2`); jika col1="ab" dan col2="12", mengembalikan "part1: ab, part2: 12".
String replacement
str_replace(original, oldStr, newStr, count)
original: string asli
oldStr: string yang akan diganti
newStr: string pengganti
count: integer, jumlah maksimum penggantian. Atur ke -1 untuk mengganti semua kemunculan.
String hasil penggantian
str_replace(`name`, "a", 'b', 1); jika name="aba", mengembalikan "bba". str_replace(`name`, "a", 'b', -1); jika name="aba", mengembalikan "bbb".
Ganti nilai di semua bidang bertipe string (seperti varchar, text, char)
tail_replace_string_field(search, replace, all)
search: string yang akan diganti
replace: string pengganti
all: apakah akan mengganti semua kecocokan; saat ini hanya mendukung true.
CatatanJika Anda tidak ingin mengganti semua kecocokan, gunakan fungsi
str_replace.
String hasil penggantian
tail_replace_string_field('\u000f', '', true) mengganti semua kemunculan "\u000f" dalam nilai bidang bertipe string dengan spasi.
Hapus karakter yang ditentukan dari awal dan akhir string
str_strip(string_val, charSet)
string_val: string asli
char_set: kumpulan karakter yang akan dihapus
String dengan karakter awal dan akhir dihapus
str_strip(`name`, 'ab'); jika name=axbzb, mengembalikan xbz.
Konversi string ke huruf kecil
str_lower(value)
value: kolom string atau literal string
String huruf kecil
str_lower(`str_col`)
Konversi string ke huruf besar
str_upper(value)
value: kolom string atau literal string
String huruf besar
str_upper(`str_col`)
Konversi string ke angka
cast_string_to_long(value)
value: string
Integer
cast_string_to_long(`col`)
Konversi angka ke string
cast_long_to_string(value)
value: integer
String
cast_long_to_string(`col`)
Hitung jumlah kemunculan substring
str_count(str,pattern)
str: kolom string atau literal string
pattern: substring yang dicari
Jumlah kemunculan substring
str_count(`str_col`, 'abc'); jika str_col="zabcyabcz", mengembalikan 2.
Temukan posisi substring
str_find(str, pattern)
str: kolom string atau literal string
pattern: substring yang dicari
Posisi kecocokan pertama; mengembalikan `-1` jika tidak ditemukan
str_find(`str_col`, 'abc'); jika `str_col="xabcy"`, mengembalikan `1`.
Periksa apakah string hanya terdiri dari huruf
str_isalpha(str)
str: kolom string atau literal string
true atau false
str_isalpha(`str_col`)
Periksa apakah string hanya terdiri dari angka
str_isdigit(str)
str: kolom string atau literal string
true atau false
str_isdigit(`str_col`)
Pencocokan ekspresi reguler
regex_match(str,regex)
str: kolom string atau literal string
regex: kolom berisi ekspresi reguler atau literal string
true atau false
regex_match(__TB__,'user_\\d+')
Samarkan bagian string dengan karakter tertentu untuk penyamaran data, seperti mengganti empat digit terakhir nomor telepon dengan tanda bintang
str_mask(str, start, end, maskStr)
str: kolom string atau literal string
start: integer, posisi awal penyamaran (minimum 0)
end: integer, posisi akhir penyamaran (maksimum panjang string minus satu)
maskStr: string satu karakter, seperti '#'
String dengan karakter dari start hingga end disamarkan
str_mask(`phone`, 7, 10, '#')
Ekstrak bagian string setelah cond
substring_after(str, cond)
str: string asli
cond: string
String
CatatanHasil tidak termasuk cond.
substring_after(`col`, 'abc')
Ekstrak bagian string sebelum cond
substring_before(str, cond)
str: string asli
cond: string
String
CatatanHasil tidak termasuk cond.
substring_before(`col`, 'efg')
Ekstrak bagian string antara cond1 dan cond2
substring_between(str, cond1, cond2)
str: string asli
cond1: string
cond2: string
String
CatatanHasil tidak termasuk cond1 atau cond2.
substring_between(`col`, 'abc','efg')
Periksa apakah nilai bertipe string
is_string_value(value)
value: string atau nama kolom
Boolean: true atau false
is_string_value(`col1`)
Ganti konten di bidang bertipe string; dimulai dari akhir secara terbalik
tail_replace_string_field(search, replace, all)
search: string yang akan diganti
replace: string pengganti
all: apakah akan mengganti semua; true atau false
String hasil penggantian
Ganti "\u000f" dengan spasi di semua nilai bidang string.
tail_replace_string_field('\u000f','',true)
Ambil nilai bidang di MongoDB
bson_value("field1","field2","field3",...)
field1: nama bidang tingkat atas
field2: nama bidang tingkat kedua
Nilai bidang yang ditentukan dalam dokumen
e_set(`user_id`, bson_value("id"))
e_set(`user_name`, bson_value("person","name"))
Fungsi tanggal dan waktu
Function
Syntax
Value range
Return value
Example
Current system time
dt_now()
None
DATETIME, akurat hingga detik
dts_now()
dt_now_millis()
None
DATETIME, akurat hingga milidetik
dt_now_millis()
Konversi stempel waktu UTC (detik) ke DATETIME
dt_fromtimestamp(value,[timezone])
value: integer
timezone: zona waktu (opsional)
DATETIME, akurat hingga detik
dt_fromtimestamp(1626837629)
dt_fromtimestamp(1626837629,'GMT+08')
Konversi stempel waktu UTC (milidetik) ke DATETIME
dt_fromtimestamp_millis(value,[timezone])
value: integer
timezone: zona waktu (opsional)
DATETIME, akurat hingga milidetik
dt_fromtimestamp_millis(1626837629123);
dt_fromtimestamp_millis(1626837629123,'GMT+08')
Konversi DATETIME ke stempel waktu UTC (detik)
dt_parsetimestamp(value,[timezone])
value: DATETIME
timezone: zona waktu (opsional)
Integer
dt_parsetimestamp(`datetime_col`)
dt_parsetimestamp(`datetime_col`,'GMT+08')
Konversi DATETIME ke stempel waktu UTC (milidetik)
dt_parsetimestamp_millis(value,[timezone])
value: DATETIME
timezone: zona waktu (opsional)
Integer
dt_parsetimestamp_millis(`datetime_col`)
dt_parsetimestamp_millis(`datetime_col`,'GMT+08')
Konversi DATETIME ke string
dt_str(value, format)
value: DATETIME
format: string dalam format yyyy-MM-dd HH:mm:ss
String
dt_str(`col1`, 'yyyy-MM-dd HH:mm:ss')
Konversi string ke DATETIME
dt_strptime(value,format)
value: string
format: string dalam format yyyy-MM-dd HH:mm:ss
DATETIME
dt_strptime('2021-07-21 03:20:29', 'yyyy-MM-dd hh:mm:ss')
Atur waktu dengan menambah atau mengurangi tahun, bulan, hari, jam, menit, atau detik
dt_add(value, [years=intVal],
[months=intVal],
[days=intVal],
[hours=intVal],
[minutes=intVal]
)
value: DATETIME
intVal: integer
CatatanTanda minus (−) menunjukkan pengurangan.
DATETIME
dt_add(datetime_col,years=-1)
dt_add(datetime_col,years=1,months=1)
Ekspresi kondisional
Function
Syntax
Value range
Return value
Example
Mirip dengan operator ternary (
? :) di C, mengembalikan nilai berdasarkan kondisi(cond ? val_1 : val_2)
cond: bidang boolean atau ekspresi
val_1: nilai kembalian 1
val_2: nilai kembalian 2
Catatanval_1 dan val_2 harus bertipe sama.
Mengembalikan val_1 jika cond true; jika tidak, mengembalikan val_2
(id>1000? 1 : 0)
Fungsi JSON
CatatanTipe nilai merepresentasikan tipe bidang apa pun di database.
Function
Syntax
Value range
Return value
Example
Konversi string array JSON ke Set
json_array(arrayText)
CatatanHanya dapat digunakan dalam ekspresi yang mengembalikan boolean.
arrayText: string, string array JSON yang akan dikonversi
Set
op_in(`id`,json_array('["0","1","2","3"]'))mengembalikan Set["0","1","2","3"].Buat array JSON dengan data yang ditentukan
json_array2(item...)
item...: tipe nilai, data untuk array JSON
Array JSON
json_array2("0","1","2","3")mengembalikan["0","1","2","3"].Buat objek JSON dengan data yang ditentukan
json_object(item...)
item...: data objek JSON (pasangan kunci-nilai), terdiri dari nama kunci (string) dan nilai kunci (tipe nilai), dipisahkan koma (,).
JSON
json_object('name','ZhangSan','age',32, 'loginId',100)mengembalikan{"name":"ZhangSan","age":32,"loginId":100}.Sisipkan data di posisi tertentu (array) dalam objek JSON
json_array_insert(json, kvPairs...)
json: string, objek JSON yang akan dimodifikasi
kvPairs...: data yang akan disisipkan. Setiap pasangan terdiri dari JSONPath (string) dan nilai (tipe nilai), dipisahkan koma.
JSON
CatatanJika posisi yang ditentukan tidak ada, mengembalikan objek JSON asli.
Jika elemen di posisi yang ditentukan tidak ada, data ditambahkan di akhir array target.
json_array_insert('{"Address":["City",1]}','$.Address[3]',100)mengembalikan{"Address":["City",1,100]}.Sisipkan data di posisi tertentu dalam objek JSON
json_insert(json, kvPairs...)
json: string, objek JSON yang akan dimodifikasi
kvPairs...: data yang akan disisipkan. Setiap pasangan terdiri dari JSONPath (string) dan nilai (tipe nilai), dipisahkan koma.
JSON
CatatanJika lokasi yang ditentukan ada, sistem mengembalikan objek JSON yang akan dioperasikan.
Jika posisi yang ditentukan tidak ada, data ditambahkan ke objek JSON.
json_insert('{"Address":["City","Xian","Number",1]}','$.ID',100)mengembalikan{"Address":["City","Xian","Number",1],"ID":100}.Sisipkan atau perbarui data di posisi tertentu dalam objek JSON
json_set(json, kvPairs...)
json: string, objek JSON yang akan dimodifikasi
kvPairs...: data yang akan disisipkan atau diperbarui. Setiap pasangan terdiri dari JSONPath (string) dan nilai (tipe nilai), dipisahkan koma.
tipe nilai
CatatanJika posisi yang ditentukan ada, perbarui data.
Jika posisi yang ditentukan tidak ada, tambahkan data ke objek JSON.
json_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-nilai dalam objek JSON
json_put(json, key, value)
json: string, objek JSON yang akan dimodifikasi
key: string, nama kunci yang akan disisipkan atau diperbarui
value: tipe nilai, nilai untuk kunci
JSON
CatatanJika json bukan objek JSON, mengembalikan null.
Jika kunci ada, perbarui nilainya.
Jika kunci tidak ada, tambahkan ke objek JSON.
json_put('{"loginId":100}','loginTime','2024-10-10')mengembalikan{"loginId":100, "loginTime":"2024-10-10"}.Ganti data di posisi tertentu dalam objek JSON
json_replace(json, kvPairs...)
json: string, objek JSON yang akan dimodifikasi
kvPairs...: data yang akan diganti. Setiap pasangan terdiri dari JSONPath (string) dan nilai (tipe nilai), dipisahkan koma.
tipe nilai
CatatanJika posisi yang ditentukan tidak ada, mengembalikan objek JSON asli.
json_replace('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100)mengembalikan{"ID":1,"Address":["City","Xian","Number",1]}.Periksa apakah data tertentu ada di posisi dalam objek JSON
json_contains(json, jsonPath, item)
json: string, objek JSON yang akan diquery
jsonPath: string, posisi dalam objek JSON
item: tipe nilai, data yang dicari
Boolean: true atau false
json_contains('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID',1)mengembalikantrue.Periksa apakah posisi tertentu ada dalam objek JSON.
json_contains_path(json, jsonPath)
json: string, objek JSON yang akan diquery
jsonPath: string, posisi yang akan diperiksa
Boolean: true atau false
json_contains_path('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID')mengembalikantrue.Ambil data dari posisi tertentu dalam objek JSON
json_extract(json, jsonPath)
json: string, objek JSON yang akan diquery
jsonPath: string, posisi dalam objek JSON
tipe nilai
json_extract('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID')mengembalikan1.Ambil nilai kunci tertentu dalam objek JSON
json_get(json, key)
json: string, objek JSON yang akan diquery
key: string, nama kunci
tipe nilai
json_get('{"ID":1,"Address":["City","Xian","Number",1]}','ID')mengembalikan1.Ambil semua kunci di posisi tertentu dalam objek JSON
json_keys(json, jsonPath)
json: string, objek JSON yang akan diquery
jsonPath: string, posisi dalam objek JSON
Array JSON
json_keys('{"ID":1,"Address":["City","Xian","Number",1]}','$')mengembalikan["ID","Address"].Ambil panjang (jumlah kunci) di posisi tertentu dalam objek JSON
json_length(json, jsonPath)
json: string, objek JSON yang akan diquery
jsonPath: string, posisi dalam objek JSON
CatatanJika jsonPath adalah
"$", setara denganjson_length(json).
Integer
json_length('{"ID":1,"Address":["City","Xian","Number",1]}','$')mengembalikan2.Ambil panjang (jumlah kunci) di root objek JSON
json_length(json)
json: string, objek JSON yang akan diquery
Integer
json_length('{"ID":1,"Address":["City","Xian","Number",1]}')mengembalikan2.Parsing string JSON menjadi objek JSON
json_parse(json)
json: string, string JSON yang akan diparsing
tipe nilai
json_parse('{"ID":1,"Address":["City","Xian","Number",1]}')mengembalikan{"ID":1,"Address":["City","Xian","Number",1]}.Hapus data dari posisi tertentu dalam objek JSON
json_remove(json, jsonPath)
json: string, objek JSON yang akan dimodifikasi
jsonPath: string, posisi dalam objek JSON
JSON
json_remove('{"loginId":100, "loginTime":"2024-10-10"}','$.loginTime')mengembalikan{"loginId":100}.
Fungsi global
Fungsi kontrol aliran
Function
Syntax
Parameters
Example
if statement
e_if(bool_expr, func_invoke)
bool_expr: konstanta boolean atau pemanggilan fungsi. Konstanta: true atau false. Contoh pemanggilan fungsi: op_gt(`id`, 10).
func_invoke: pemanggilan fungsi. Didukung: e_drop, e_keep, e_set, e_if, e_compose
e_if(op_gt(`id`, 10), e_drop()); menghapus catatan jika ID > 10.
if-else statement
e_if_else(bool_expr, func_invoke1, func_invoke2)
bool_expr: konstanta boolean atau pemanggilan fungsi. Konstanta: true atau false. Contoh pemanggilan fungsi: op_gt(`id`, 10).
func_invoke1: pemanggilan fungsi yang dieksekusi jika kondisi true.
func_invoke2: pemanggilan fungsi yang dieksekusi jika kondisi false.
e_if_else(op_gt(`id`, 10), e_set(`tag`, 'large'), e_set(`tag`, 'small')); mengatur tag ke "large" jika ID > 10, jika tidak ke "small".
Pernyataan mirip switch yang mengevaluasi beberapa kondisi dan mengeksekusi operasi pertama yang cocok. Mengeksekusi operasi default jika tidak ada kondisi yang cocok.
s_switch(condition1, func1, condition2, func2, ..., default=default_func)
condition1: konstanta boolean atau pemanggilan fungsi. Konstanta: true atau false. Contoh pemanggilan fungsi: op_gt(`id`, 10).
func_invoke: pemanggilan fungsi. Memeriksa condition1; jika true, eksekusi fungsi ini dan keluar dari switch. Jika false, periksa kondisi berikutnya.
default_func: pemanggilan fungsi yang dieksekusi jika semua kondisi false.
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')).
Gabungkan beberapa operasi
e_compose(func1, func2, func3, ...)
func1: pemanggilan fungsi. Dapat berupa e_set, e_drop, e_if.
func2: pemanggilan fungsi. Dapat berupa e_set, e_drop, e_if.
e_compose(e_set(`str_col`, 'test'), e_set(`dt_col`, dt_now())); mengatur str_col ke "test" dan dt_col ke waktu saat ini.
Fungsi manipulasi data
Function
Syntax
Parameters
Example
Drop this record (do not synchronize)
e_drop()
None
e_if(op_gt(`id`, 10), e_drop()); menghapus catatan di mana ID > 10.
Keep this record (synchronize to destination)
e_keep(condition)
condition: ekspresi boolean
e_keep(op_gt(id, 1)); hanya menyinkronkan catatan di mana ID > 1.
Set column value
e_set(`col`, val, NEW)
col: nama kolom
val: konstanta atau pemanggilan fungsi. Harus sesuai dengan tipe data col.
NEW: mengonversi col ke tipe data val (opsional)
PentingJika Anda menghilangkan NEW, jangan sertakan koma sebelumnya. Pastikan kompatibilitas tipe data untuk menghindari error tugas.
e_set(`dt_col`, dt_now()); mengatur dt_col ke waktu saat ini.
e_set(`col1`, `col2` + 1); mengatur col1 ke col2 + 1.
e_set(`col1`, 1, NEW); mengonversi col1 ke tipe numerik dan mengaturnya ke 1.
Retensi bidang MongoDB, penghapusan bidang, dan pemetaan nama bidang
e_expand_bson_value('*', 'fieldA',{"fieldB":"fieldC"})
*: nama bidang yang akan dipertahankan; * berarti semua bidang.
fieldA: nama bidang yang akan dihapus.
{"fieldB":"fieldC"}: pemetaan nama bidang; fieldB adalah nama bidang sumber, fieldC adalah nama bidang tujuan.
CatatanPemetaan nama bidang opsional.
e_expand_bson_value("*", "_id,name"); menulis semua bidang kecuali _id dan name ke tujuan.