Data Transmission Service (DTS) menyediakan fitur ekstraksi, transformasi, dan pemuatan (ETL) data streaming. Fitur ini, yang dikombinasikan dengan kemampuan replikasi data efisien dari DTS, memungkinkan Anda mengekstraksi, mentransformasi, memproses, dan memuat data streaming. Topik ini menjelaskan cara mengonfigurasi ETL untuk tugas DTS serta menyediakan informasi terkait sintaksnya. Anda dapat menggunakan fitur ETL dalam berbagai skenario, seperti penyaringan data, penyamaran data, pencatatan waktu modifikasi data, dan audit perubahan data.
Informasi latar belakang
DTS adalah layanan migrasi dan sinkronisasi data yang umumnya digunakan untuk relokasi data atau transmisi data real-time. Namun, terkadang Anda perlu memproses data—misalnya, mentransformasi atau menyaring data real-time sebelum menuliskannya ke database. Untuk memenuhi kebutuhan tersebut, DTS menyediakan fitur ETL data streaming yang mendukung bahasa skrip domain-spesifik (DSL) guna mendefinisikan logika pemrosesan data secara fleksibel. Untuk pengenalan DSL dan sintaks konfigurasinya, lihat Pengenalan sintaks DSL pemrosesan data.
DTS mendukung dua metode untuk mengonfigurasi ETL.
Anda dapat mengonfigurasi ETL baik untuk tugas migrasi maupun sinkronisasi DTS. Topik ini menggunakan tugas sinkronisasi sebagai contoh. Metode konfigurasi untuk tugas migrasi serupa.
Database yang didukung
Tabel berikut mencantumkan database sumber dan tujuan yang mendukung ETL.
Database sumber | Database tujuan |
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 mencakup operasi penambahan kolom baru, Anda harus menambahkan kolom tersebut secara manual ke database tujuan. Jika tidak, skrip ETL tidak akan berlaku. Misalnya, jika Anda menggunakan
e_set(`new_column`, dt_now()), Anda harus menambahkan kolomnew_columnsecara manual ke database tujuan.Skrip DSL terutama digunakan untuk transformasi dan pembersihan data, bukan untuk pembuatan objek database.
Bidang yang dikonfigurasi dalam skrip DSL harus ada di database sumber dan tidak boleh merupakan bidang yang difilter oleh kondisi filter. Jika tidak, tugas mungkin gagal.
Skrip DSL bersifat case-sensitive. Nama database, tabel, dan bidang harus persis sama dengan yang ada di database sumber.
Skrip DSL tidak mendukung beberapa ekspresi sekaligus. Anda dapat menggunakan fungsi
e_composeuntuk menggabungkan beberapa ekspresi menjadi satu ekspresi.Setelah diproses oleh skrip DSL, perubahan DML untuk semua tabel di database sumber harus memiliki informasi kolom yang konsisten. Jika tidak, tugas mungkin gagal. Misalnya, jika Anda menggunakan fungsi
e_setdalam skrip DSL untuk menambahkan kolom baru, pastikan bahwa operasi INSERT, UPDATE, dan DELETE di database sumber semuanya menghasilkan penambahan kolom tersebut ke tabel tujuan. Untuk informasi lebih lanjut, lihat Catat waktu modifikasi data.
Prosedur
Buat tugas sinkronisasi. Untuk informasi lebih lanjut, lihat Solusi sinkronisasi.
Pada langkah Advanced Configurations, atur Configure ETL menjadi Yes.
Di kotak teks, masukkan pernyataan transformasi data (ETL) berdasarkan Sintaks DSL pemrosesan data.
CatatanSebagai contoh, untuk memproses catatan dengan ID lebih besar dari 3 menggunakan DSL, Anda dapat menggunakan
e_if(op_gt(`id`, 3), e_drop()). Dalam skrip ini,op_gtadalah fungsi kondisional yang memeriksa apakah suatu nilai lebih besar dari nilai lainnya, sedangkanidadalah variabel. Skrip ini menyaring catatan dengan ID lebih besar dari 3.Selesaikan langkah-langkah berikutnya sesuai kebutuhan.
Ubah konfigurasi ETL tugas sinkronisasi yang sudah ada
Anda dapat mengubah konfigurasi ETL tugas sinkronisasi yang sudah ada dengan cara berikut:
Jika tugas sinkronisasi dibuat tanpa konfigurasi ETL (opsi Configure ETL diatur ke No), Anda dapat mengubah pengaturannya dari No menjadi Yes dan mengonfigurasi skrip DSL.
Jika tugas sinkronisasi telah dikonfigurasi ETL, Anda dapat memodifikasi skrip DSL atau mengatur Configure ETL menjadi No.
PentingSebelum memodifikasi skrip DSL yang sudah ada, pindahkan objek sinkronisasi dari daftar Selected Objects ke daftar Source Objects, lalu tambahkan kembali ke daftar Selected Objects.
Anda tidak dapat memodifikasi skrip DSL untuk tugas migrasi.
Catatan
Modifikasi konfigurasi ETL tugas sinkronisasi yang sudah ada tidak mendukung perubahan skema tabel tujuan. Untuk mengubah skema, Anda harus memperbarui skema tabel di database tujuan sebelum memulai tugas sinkronisasi.
Modifikasi konfigurasi ETL dapat mengganggu tugas. Lakukan dengan hati-hati.
Perubahan pada konfigurasi ETL hanya berlaku untuk data inkremental setelah tugas sinkronisasi dimulai dan tidak memengaruhi data historis yang telah disinkronkan sebelum modifikasi.
Skrip DSL terutama digunakan untuk transformasi dan pembersihan data, bukan untuk pembuatan objek database.
Bidang yang dikonfigurasi dalam skrip DSL harus ada di database sumber dan tidak boleh merupakan bidang yang difilter oleh kondisi filter. Jika tidak, tugas mungkin gagal.
Skrip DSL bersifat case-sensitive. Nama database, tabel, dan bidang harus persis sama dengan yang ada di database sumber.
Skrip DSL tidak mendukung beberapa ekspresi sekaligus. Anda dapat menggunakan fungsi
e_composeuntuk menggabungkan beberapa ekspresi menjadi satu ekspresi.Setelah diproses oleh skrip DSL, perubahan DML untuk semua tabel di database sumber harus memiliki informasi kolom yang konsisten. Jika tidak, tugas mungkin gagal. Misalnya, jika Anda menggunakan fungsi
e_setdalam skrip DSL untuk menambahkan kolom baru, pastikan bahwa operasi INSERT, UPDATE, dan DELETE di database sumber semuanya menghasilkan penambahan kolom tersebut ke tabel tujuan. Untuk informasi lebih lanjut, lihat Catat waktu modifikasi data.
Prosedur
Masuk ke Halaman Tugas Sinkronisasi Data di konsol DTS baru.
Pada baris tugas sinkronisasi target, klik ikon
lalu pilih Modify ETL Configuration.Pada langkah Advanced Configurations, atur Configure ETL menjadi Yes.
Di kotak teks, masukkan pernyataan transformasi data (ETL) berdasarkan Sintaks DSL pemrosesan data.
CatatanSebagai contoh, untuk memproses catatan dengan ID lebih besar dari 3 menggunakan DSL, Anda dapat menggunakan
e_if(op_gt(`id`, 3), e_drop()). Dalam skrip ini,op_gtadalah fungsi kondisional yang memeriksa apakah suatu nilai lebih besar dari nilai lainnya, sedangkanidadalah variabel. Skrip ini menyaring catatan dengan ID lebih besar dari 3.Selesaikan langkah-langkah berikutnya sesuai kebutuhan.
Pengenalan sintaks DSL pemrosesan data
DSL pemrosesan data adalah bahasa skrip yang dirancang oleh DTS untuk pemrosesan data dalam skenario sinkronisasi data. DSL ini mendukung fungsi kondisional serta mampu memproses string, tanggal, dan angka. DSL ini memungkinkan Anda mendefinisikan logika pemrosesan data secara fleksibel dan memiliki 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. Untuk informasi lebih lanjut, lihat Contoh untuk skenario umum.
Kinerja tinggi: Berbasis teknologi generasi kode, DSL ini memiliki dampak kinerja minimal terhadap proses sinkronisasi.
Dalam sintaks DSL, nama kolom diapit tanda backtick (``), bukan tanda kutip tunggal ('').
Fitur ini didasarkan pada sintaks pemrosesan data Simple Log Service (SLS). Fitur ini mendukung fungsi JSON tetapi tidak mendukung fungsi pemisahan event. Untuk informasi lebih lanjut tentang sintaks SLS, lihat Ikhtisar sintaks.
Contoh untuk skenario umum
Penyaringan data
Filter berdasarkan kolom numerik: Jika `id` > 10000, hapus catatan dan jangan sinkronkan ke database tujuan: e_if(op_gt(`id`, 10000), e_drop()).
Filter berdasarkan pencocokan string: Jika kolom `name` berisi "hangzhou", hapus catatan: e_if(str_contains(`name`, "hangzhou"), e_drop()).
Filter berdasarkan tanggal: Jika waktu pesanan lebih awal dari waktu tertentu, jangan sinkronkan catatan: e_if(op_lt(`order_timestamp`, "2015-02-23 23:54:55"), e_drop()).
Filter berdasarkan beberapa kondisi:
Jika `id` > 1000 DAN kolom `name` berisi "hangzhou", hapus catatan: e_if(op_and(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop()).
Jika `id` > 1000 ATAU kolom `name` berisi "hangzhou", hapus catatan: e_if(op_or(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop()).
Penyamaran data
Penyamaran: Ganti empat digit terakhir kolom `phone` dengan tanda bintang: e_set(`phone`, str_mask(`phone`, 7, 10, '*')).
Catat waktu modifikasi data
Tambahkan kolom baru ke semua tabel: Jika nilai __OPERATION__ adalah INSERT, UPDATE, atau DELETE, tambahkan kolom baru bernama "dts_sync_time" dengan nilai 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 baru ke tabel tertentu bernama "dts_test_table": Jika nilai __OPERATION__ adalah INSERT, UPDATE, atau DELETE, tambahkan kolom baru bernama "dts_sync_time" dengan nilai 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__))CatatanUntuk operasi penambahan kolom baru di atas, Anda harus memodifikasi definisi tabel tujuan untuk menambahkan kolom "dts_sync_time" sebelum memulai tugas.
Audit perubahan data
Audit perubahan data untuk tabel: Catat jenis perubahan data di kolom "operation_type" dan waktu perubahan data di kolom "updated" tabel 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.
Bedakan antara data penuh dan data inkremental
Catat apakah data berasal dari migrasi penuh atau migrasi inkremental di kolom is_increment_dml tabel tujuan. Anda dapat membedakan antara migrasi penuh dan migrasi inkremental dengan memeriksa nilai __COMMIT_TIMESTAMP__. Untuk migrasi penuh, nilai __COMMIT_TIMESTAMP__ adalah 0 (1970-01-01 08:00:00, yang dipengaruhi oleh zona waktu). Untuk migrasi inkremental, nilainya adalah waktu saat log ditulis ke database sumber. Skrip ETL yang sesuai adalah sebagai berikut:
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
Tipe
Contoh
int
123
float
123.4
string
"hello1_world"
boolean
true atau false
datetime
DATETIME('2021-01-01 10:10:01')
Variabel
Variabel
Deskripsi
Tipe data
Nilai contoh
__TB__
Nama tabel
string
table
__DB__
Nama database
string
mydb
__OPERATION__
Jenis operasi
string
__OP_INSERT__,__OP_UPDATE__,__OP_DELETE__
__BEFORE__
Citra sebelum operasi UPDATE (nilai sebelum pembaruan)
CatatanOperasi DELETE hanya memiliki citra sebelumnya.
Tanda khusus, tidak memiliki tipe
v(`column_name`,__BEFORE__)
__AFTER__
Citra setelah operasi UPDATE (nilai setelah pembaruan)
CatatanOperasi INSERT hanya memiliki citra setelahnya.
Tanda khusus, tidak memiliki tipe
v(`column_name`,__AFTER__)
__COMMIT_TIMESTAMP__
Waktu commit transaksi
datetime
'2021-01-01 10:10:01'
`column`
Nilai kolom yang ditentukan dalam catatan data
string
`id`, `name`
Fungsi ekspresi
Operasi numerik
Fitur
Sintaks
Rentang nilai
Nilai kembali
Contoh
Penjumlahan
op_sum(value1, value2)
value1: bilangan bulat atau bilangan titik mengambang
value2: bilangan bulat atau bilangan titik mengambang
Jika kedua parameter adalah bilangan bulat, nilai yang dikembalikan adalah bilangan bulat. Jika tidak, nilai yang dikembalikan adalah bilangan titik mengambang.
op_sum(`col1`, 1.0)
Pengurangan
op_sub(value1, value2)
value1: bilangan bulat atau bilangan titik mengambang
value2: bilangan bulat atau bilangan titik mengambang
Jika kedua parameter adalah bilangan bulat, nilai yang dikembalikan adalah bilangan bulat. Jika tidak, nilai yang dikembalikan adalah bilangan titik mengambang.
op_sub(`col1`, 1.0)
Perkalian
op_mul(value1, value2)
value1: bilangan bulat atau bilangan titik mengambang
value2: bilangan bulat atau bilangan titik mengambang
Jika kedua parameter adalah bilangan bulat, nilai yang dikembalikan adalah bilangan bulat. Jika tidak, nilai yang dikembalikan adalah bilangan titik mengambang.
op_mul(`col1`, 1.0)
Pembagian
op_div_true(value1, value2)
value1: bilangan bulat atau bilangan titik mengambang
value2: bilangan bulat atau bilangan titik mengambang
Jika kedua parameter adalah bilangan bulat, nilai yang dikembalikan adalah bilangan bulat. Jika tidak, nilai yang dikembalikan adalah bilangan titik mengambang.
op_div_true(`col1`, 2.0). Jika col1=15, nilai yang dikembalikan adalah 7.5.
Operasi modulo
op_mod(value1, value2)
value1: bilangan bulat atau bilangan titik mengambang
value2: bilangan bulat atau bilangan titik mengambang
Jika kedua parameter adalah bilangan bulat, nilai yang dikembalikan adalah bilangan bulat. Jika tidak, nilai yang dikembalikan adalah bilangan titik mengambang.
op_mod(`col1`, 10). Jika col1=23, nilai yang dikembalikan adalah 3.
Operasi logika
Fitur
Sintaks
Rentang nilai
Nilai kembali
Contoh
Sama dengan
op_eq(value1, value2)
value1: bilangan bulat, bilangan titik mengambang, atau string
value2: bilangan bulat, bilangan titik mengambang, atau string
boolean: true atau false
op_eq(`col1`, 23)
Lebih besar dari
op_gt(value1, value2)
value1: bilangan bulat, bilangan titik mengambang, atau string
value2: bilangan bulat, bilangan titik mengambang, atau string
boolean: true atau false
op_gt(`col1`, 1.0)
Lebih kecil dari
op_lt(value1, value2)
value1: bilangan bulat, bilangan titik mengambang, atau string
value2: bilangan bulat, bilangan titik mengambang, atau string
boolean: true atau false
op_lt(`col1`, 1.0)
Lebih besar dari atau sama dengan
op_ge(value1, value2)
value1: bilangan bulat, bilangan titik mengambang, atau string
value2: bilangan bulat, bilangan titik mengambang, atau string
boolean: true atau false
op_ge(`col1`, 1.0)
Lebih kecil dari atau sama dengan
op_le(value1, value2)
value1: bilangan bulat, bilangan titik mengambang, atau string
value2: bilangan bulat, bilangan titik mengambang, atau string
boolean: true atau false
op_le(`col1`, 1.0)
Operasi AND
op_and(value1, value2)
value1: boolean
value2: boolean
boolean: true atau false
op_and(`is_male`, `is_student`)
Operasi OR
op_or(value1, value2)
value1: boolean
value2: boolean
boolean: true atau false
op_or(`is_male`, `is_student`)
Operasi IN
op_in(value, json_array)
value: tipe apa pun
json_array: string dalam format JSON
boolean: true atau false
op_in(`id`,json_array('["0","1","2","3","4","5","6","7","8"]'))
Apakah null
op_is_null(value)
value: tipe apa pun
boolean: true atau false
op_is_null(`name`)
Bukan null
op_is_not_null(value)
value: tipe apa pun
boolean: true atau false
op_is_not_null(`name`)
Fungsi string
Fitur
Sintaks
Rentang nilai
Nilai kembali
Contoh
Penggabungan string
op_add(str_1,str_2,...,str_n)
str_1: string
str_2: string
...
str_n: string
String yang digabungkan
op_add(`col`,'hangzhou','dts')
Pemformatan dan penggabungan string
str_format(format, value1, value2, value3, ...)
format: string yang menggunakan tanda kurung kurawal ({}) sebagai placeholder, seperti "part1: {}, part2: {}".
value1: apa saja
value2: apa saja
String yang diformat
str_format("part1: {}, part2: {}", `col1`, `col2`). Jika col1="ab" dan col2="12", nilai yang dikembalikan adalah "part1: ab, part2: 12".
Penggantian string
str_replace(original, oldStr, newStr, count)
original: string asli
oldStr: string yang akan diganti
newStr: string pengganti
count: bilangan bulat yang menentukan jumlah maksimum penggantian. Jika Anda mengatur parameter ini ke -1, semua kemunculan akan diganti.
String setelah penggantian
str_replace(`name`, "a", 'b', 1). Jika name="aba", nilai yang dikembalikan adalah "bba". str_replace(`name`, "a", 'b', -1). Jika name="aba", nilai yang dikembalikan adalah "bbb".
Ganti nilai di semua bidang bertipe string (seperti varchar, text, dan char)
tail_replace_string_field(search, replace, all)
search: string yang akan diganti
replace: string pengganti
all: menentukan apakah akan mengganti semua string yang cocok. Parameter ini hanya mendukung true.
CatatanJika Anda tidak perlu mengganti semua string yang cocok, gunakan fungsi
str_replace.
String setelah penggantian
tail_replace_string_field('\u000f','',true). Mengganti "\u000f" dengan spasi pada nilai semua bidang bertipe string.
Hapus karakter tertentu dari awal dan akhir string
str_strip(string_val, charSet)
string_val: string asli
char_set: kumpulan karakter yang akan dihapus
String setelah karakter dihapus dari awal dan akhir
str_strip(`name`, 'ab'). Jika name=axbzb, nilai yang dikembalikan adalah xbz.
Mengonversi string menjadi huruf kecil
str_lower(value)
value: kolom string atau konstanta string
String huruf kecil
str_lower(`str_col`)
Mengonversi string menjadi huruf besar
str_upper(value)
value: kolom string atau konstanta string
String huruf besar
str_upper(`str_col`)
Mengonversi string menjadi angka
cast_string_to_long(value)
value: string
Bilangan bulat
cast_string_to_long(`col`)
Mengonversi angka menjadi string
cast_long_to_string(value)
value: bilangan bulat
String
cast_long_to_string(`col`)
Menghitung kemunculan substring
str_count(str,pattern)
str: kolom string atau konstanta string
pattern: substring yang akan dicari
Jumlah kemunculan substring
str_count(`str_col`, 'abc'). Jika str_col="zabcyabcz", nilai yang dikembalikan adalah 2.
Menemukan substring
str_find(str, pattern)
str: kolom string atau konstanta string
pattern: substring yang akan dicari
Posisi kecocokan pertama substring. Jika tidak ditemukan kecocokan, nilai yang dikembalikan adalah `-1`.
str_find(`str_col`, 'abc'). Jika `str_col="xabcy"`, nilai yang dikembalikan adalah `1`.
Periksa apakah string hanya terdiri dari huruf
str_isalpha(str)
str: kolom string atau konstanta string
true atau false
str_isalpha(`str_col`)
Periksa apakah string hanya terdiri dari angka
str_isdigit(str)
str: kolom string atau konstanta string
true atau false
str_isdigit(`str_col`)
Pencocokan ekspresi reguler
regex_match(str,regex)
str: kolom string atau konstanta string
regex: kolom string ekspresi reguler atau konstanta string
true atau false
regex_match(__TB__,'user_\\d+')
Menyamarkan bagian string dengan karakter tertentu. Ini dapat digunakan untuk penyamaran data, seperti mengganti empat digit terakhir nomor telepon dengan tanda bintang.
str_mask(str, start, end, maskStr)
str: kolom string atau konstanta string
start: bilangan bulat yang menentukan posisi awal penyamaran. Nilai minimum adalah 0.
end: bilangan bulat yang menentukan posisi akhir penyamaran. Nilai maksimum adalah panjang string dikurangi 1.
maskStr: string dengan panjang 1, seperti '#'.
String setelah bagian dari posisi awal hingga posisi akhir disamarkan
str_mask(`phone`, 7, 10, '#')
Dapatkan substring setelah string tertentu
substring_after(str, cond)
str: string asli
cond: string
String
CatatanNilai yang dikembalikan tidak termasuk string cond.
substring_after(`col`, 'abc')
Dapatkan substring sebelum string tertentu
substring_before(str, cond)
str: string asli
cond: string
String
CatatanNilai yang dikembalikan tidak termasuk string cond.
substring_before(`col`, 'efg')
Dapatkan substring di antara dua string tertentu
substring_between(str, cond1, cond2)
str: string asli
cond1: string
cond2: string
String
CatatanNilai yang dikembalikan tidak termasuk string cond1 dan cond2.
substring_between(`col`, 'abc','efg')
Periksa apakah nilai adalah string
is_string_value(value)
value: string atau nama kolom
boolean: true atau false
is_string_value(`col1`)
Ganti konten di bidang bertipe string, mulai dari akhir secara terbalik.
tail_replace_string_field(search, replace, all)
search: string yang akan diganti
replace: string pengganti
all: menentukan apakah akan mengganti semua kemunculan. Nilainya bisa true atau false.
String setelah penggantian
Ganti "\u000f" dengan spasi pada nilai semua bidang bertipe string.
tail_replace_string_field('\u000f','',true)
Dapatkan nilai bidang di MongoDB
bson_value("field1","field2","field3",...)
field1: nama bidang tingkat-1.
field2: nama bidang tingkat-2.
Nilai bidang yang sesuai dalam dokumen
e_set(`user_id`, bson_value("id"))
e_set(`user_name`, bson_value("person","name"))
Fungsi waktu
Fitur
Sintaks
Rentang nilai
Nilai kembali
Contoh
Waktu sistem saat ini
dt_now()
Tidak ada
DATETIME, akurat hingga detik
dts_now()
dt_now_millis()
Tidak ada
DATETIME, akurat hingga milidetik
dt_now_millis()
Mengonversi timestamp UTC (dalam detik) ke DATETIME
dt_fromtimestamp(value,[timezone])
value: bilangan bulat
timezone: zona waktu. Ini adalah parameter opsional.
DATETIME, akurat hingga detik
dt_fromtimestamp(1626837629)
dt_fromtimestamp(1626837629,'GMT+08')
Mengonversi timestamp UTC (dalam milidetik) ke DATETIME
dt_fromtimestamp_millis(value,[timezone])
value: bilangan bulat
timezone: zona waktu. Ini adalah parameter opsional.
DATETIME, akurat hingga milidetik
dt_fromtimestamp_millis(1626837629123);
dt_fromtimestamp_millis(1626837629123,'GMT+08')
Mengonversi DATETIME ke timestamp UTC (dalam detik)
dt_parsetimestamp(value,[timezone])
value: DATETIME
timezone: zona waktu. Ini adalah parameter opsional.
Bilangan bulat
dt_parsetimestamp(`datetime_col`)
dt_parsetimestamp(`datetime_col`,'GMT+08')
Mengonversi DATETIME ke timestamp UTC (dalam milidetik)
dt_parsetimestamp_millis(value,[timezone])
value: DATETIME
timezone: zona waktu. Ini adalah parameter opsional.
Bilangan bulat
dt_parsetimestamp_millis(`datetime_col`)
dt_parsetimestamp_millis(`datetime_col`,'GMT+08')
Mengonversi 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')
Mengonversi 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')
Memodifikasi waktu dengan menambahkan atau mengurangi nilai dari tahun, bulan, hari, jam, menit, atau detik
dt_add(value, [years=intVal],
[months=intVal],
[days=intVal],
[hours=intVal],
[minutes=intVal]
)
value: DATETIME
intVal: bilangan bulat
CatatanTanda minus (-) menunjukkan pengurangan.
DATETIME
dt_add(datetime_col,years=-1)
dt_add(datetime_col,years=1,months=1)
Ekspresi kondisional
Fitur
Sintaks
Rentang nilai
Nilai kembali
Contoh
Mirip dengan operator ternary (
? :) di C. Mengembalikan nilai berdasarkan kondisi.(cond ? val_1 : val_2)
cond: bidang boolean atau ekspresi
val_1: nilai kembali 1
val_2: nilai kembali 2
Catatanval_1 dan val_2 harus memiliki tipe yang sama.
Jika cond bernilai true, val_1 dikembalikan. Jika tidak, val_2 dikembalikan.
(id>1000? 1 : 0)
Fungsi JSON
CatatanTipe `value` merepresentasikan tipe bidang apa pun di database.
Fitur
Sintaks
Rentang nilai
Nilai kembali
Contoh
Mengonversi string array JSON menjadi kumpulan set
json_array(arrayText)
CatatanFungsi ini hanya dapat digunakan dalam ekspresi yang mengembalikan nilai boolean.
arrayText: String yang menentukan string array JSON yang akan dikonversi.
Kumpulan set
op_in(`id`,json_array('["0","1","2","3"]')). Kumpulan set["0","1","2","3"]dikembalikan.Membuat array JSON yang berisi data tertentu
json_array2(item...)
item...: Data untuk array JSON. Tipe data adalah value.
Array JSON
json_array2("0","1","2","3").["0","1","2","3"]dikembalikan.Membuat objek JSON yang berisi data tertentu
json_object(item...)
item...: Data (pasangan kunci-nilai) untuk objek JSON. Terdiri dari nama kunci (string) dan nilai kunci (tipe value), dipisahkan oleh koma (,).
JSON
json_object('name','ZhangSan','age',32, 'loginId',100).{"name":"ZhangSan","age":32,"loginId":100}dikembalikan.Menyisipkan data ke posisi tertentu dalam objek JSON (array)
json_array_insert(json, kvPairs...)
json: String yang menentukan objek JSON yang akan diproses.
kvPairs...: Data yang akan disisipkan. Terdiri dari posisi array (jsonPath, tipe string) dan data spesifik (tipe value), dipisahkan oleh koma (,).
JSON
CatatanJika posisi yang ditentukan tidak ada, objek JSON asli dikembalikan.
Jika elemen pada posisi yang ditentukan tidak ada, data ditambahkan ke akhir array tujuan.
json_array_insert('{"Address":["City",1]}','$.Address[3]',100).{"Address":["City",1,100]}dikembalikan.Menyisipkan data ke posisi tertentu dalam objek JSON
json_insert(json, kvPairs...)
json: String yang menentukan objek JSON yang akan diproses.
kvPairs...: Data yang akan disisipkan. Terdiri dari posisi (jsonPath, tipe string) dan data spesifik (tipe value), dipisahkan oleh koma (,).
JSON
CatatanJika posisi yang ditentukan ada, objek JSON asli dikembalikan.
Jika posisi yang ditentukan tidak ada, data ditambahkan ke objek JSON.
json_insert('{"Address":["City","Xian","Number",1]}','$.ID',100).{"Address":["City","Xian","Number",1],"ID":100}dikembalikan.Menyisipkan atau memperbarui data pada posisi tertentu dalam objek JSON
json_set(json, kvPairs...)
json: String yang menentukan objek JSON yang akan diproses.
kvPairs...: Data yang akan disisipkan. Terdiri dari posisi (jsonPath, tipe string) dan data spesifik (tipe value), dipisahkan oleh koma (,).
tipe value
CatatanJika posisi yang ditentukan ada, data pada posisi tersebut diperbarui.
Jika posisi yang ditentukan tidak ada, data ditambahkan ke objek JSON.
json_set('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100).{"ID":1,"Address":["City","Xian","Number",1], "IP":100}dikembalikan.Menyisipkan atau memperbarui data (pasangan kunci-nilai) dalam objek JSON
json_put(json, key, value)
json: String yang menentukan objek JSON yang akan diproses.
key: String yang menentukan nama kunci yang akan disisipkan.
value: Nilai kunci yang akan disisipkan. Tipe data adalah value.
JSON
CatatanJika parameter json bukan objek JSON, nilai null dikembalikan.
Jika nama kunci yang ditentukan ada, nilai kunci yang sesuai diperbarui.
Jika nama kunci yang ditentukan tidak ada, data ditambahkan ke objek JSON.
json_put('{"loginId":100}','loginTime','2024-10-10').{"loginId":100, 'loginTime':'2024-10-10'}dikembalikan.Mengganti data pada posisi tertentu dalam objek JSON
json_replace(json, kvPairs...)
json: String yang menentukan objek JSON yang akan diproses.
kvPairs...: Data yang akan diganti. Terdiri dari posisi (jsonPath, tipe string) dan data spesifik (tipe value), dipisahkan oleh koma (,).
tipe value
CatatanJika posisi yang ditentukan tidak ada, objek JSON asli dikembalikan.
json_replace('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100).{"ID":1,"Address":["City","Xian","Number",1]}dikembalikan.Periksa apakah data tertentu ada pada posisi tertentu dalam objek JSON
json_contains(json, jsonPath, item)
json: String yang menentukan objek JSON yang akan diproses.
jsonPath: String yang menentukan posisi dalam objek JSON.
item: Data spesifik yang akan diquery. Tipe data adalah value.
boolean: true atau false
json_contains('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID',1).truedikembalikan.Periksa apakah posisi tertentu ada dalam objek JSON
json_contains_path(json, jsonPath)
json: String yang menentukan objek JSON yang akan diproses.
jsonPath: String yang menentukan informasi posisi yang akan diquery.
boolean: true atau false
json_contains_path('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID').truedikembalikan.Mengambil data dari posisi tertentu dalam objek JSON
json_extract(json, jsonPath)
json: String yang menentukan objek JSON yang akan diproses.
jsonPath: String yang menentukan posisi dalam objek JSON.
tipe value
json_extract('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID').1dikembalikan.Mengambil nilai kunci tertentu dalam objek JSON
json_get(json, key)
json: String yang menentukan objek JSON yang akan diproses.
key: String yang menentukan nama kunci dari data yang akan diambil.
tipe value
json_get('{"ID":1,"Address":["City","Xian","Number",1]}','ID').1dikembalikan.Mengambil semua kunci pada posisi tertentu dalam objek JSON
json_keys(json, jsonPath)
json: String yang menentukan objek JSON yang akan diproses.
jsonPath: String yang menentukan posisi dalam objek JSON.
Array JSON
json_keys('{"ID":1,"Address":["City","Xian","Number",1]}','$').["ID","Address"]dikembalikan.Menanyakan panjang (jumlah kunci) pada posisi tertentu dalam objek JSON
json_length(json, jsonPath)
json: String yang menentukan objek JSON yang akan diproses.
jsonPath: String yang menentukan posisi dalam objek JSON.
CatatanJika nilai jsonPath adalah
"$", ini setara denganjson_length(json).
Bilangan bulat
json_length('{"ID":1,"Address":["City","Xian","Number",1]}','$').2dikembalikan.Menanyakan panjang (jumlah kunci) dari node root objek JSON
json_length(json)
json: String yang menentukan objek JSON yang akan diproses.
Bilangan bulat
json_length('{"ID":1,"Address":["City","Xian","Number",1]}').2dikembalikan.Mengonversi string JSON menjadi objek JSON
json_parse(json)
json: String yang menentukan objek JSON yang akan diproses.
tipe value
json_parse('{"ID":1,"Address":["City","Xian","Number",1]}').{"ID":1,"Address":["City","Xian","Number",1]}dikembalikan.Menghapus data dari posisi tertentu dalam objek JSON
json_remove(json, jsonPath)
json: String yang menentukan objek JSON yang akan diproses.
jsonPath: String yang menentukan posisi dalam objek JSON.
JSON
json_remove('{"loginId":100, 'loginTime':'2024-10-10'}','$.loginTime').{"loginId":100}dikembalikan.
Fungsi global
Fungsi kontrol alur
Fitur
Sintaks
Deskripsi parameter
Contoh
pernyataan if
e_if(bool_expr, func_invoke)
bool_expr: konstanta boolean atau pemanggilan fungsi. Konstanta: true atau false. Pemanggilan fungsi: op_gt(`id`, 10).
func_invoke: pemanggilan fungsi. e_drop,e_keep,e_set,e_if,e_compose
e_if(op_gt(`id`, 10), e_drop()). Menghapus catatan jika ID lebih besar dari 10.
pernyataan if else
e_if_else(bool_expr, func_invoke1, func_invoke2)
bool_expr: konstanta boolean atau pemanggilan fungsi. Konstanta: true atau false. Pemanggilan fungsi: op_gt(`id`, 10).
func_invoke1: pemanggilan fungsi. Dieksekusi jika kondisi bernilai true.
func_invoke2: pemanggilan fungsi. Dieksekusi jika kondisi bernilai false.
e_if_else(op_gt(`id`, 10), e_set(`tag`, 'large'), e_set(`tag`, 'small')). Jika ID lebih besar dari 10, mengatur kolom tag menjadi "large". Jika tidak, mengatur menjadi "small".
Pernyataan seperti switch yang mengevaluasi beberapa kondisi. Menjalankan operasi untuk kondisi pertama yang cocok. Jika tidak ada kondisi yang cocok, menjalankan operasi default.
s_switch(condition1, func1, condition2, func2, ..., default = default_func)
condition1: Konstanta Boolean atau pemanggilan fungsi. Konstanta: true atau false. Pemanggilan fungsi: op_gt(`id`, 10).
func_invoke: Pemanggilan fungsi. Jika condition1 bernilai true, fungsi ini dieksekusi dan pernyataan switch keluar. Jika condition1 bernilai false, pemeriksaan dilanjutkan ke kondisi berikutnya.
default_func: Pemanggilan fungsi. Fungsi ini dieksekusi jika semua kondisi sebelumnya bernilai 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')).
Menggabungkan beberapa operasi
e_compose(func1, func2, func3, ...)
func1: pemanggilan fungsi. Dapat berupa e_set, e_drop, atau e_if.
func2: pemanggilan fungsi. Dapat berupa e_set, e_drop, atau e_if.
e_compose(e_set(`str_col`, 'test'), e_set(`dt_col`, dt_now())). Mengatur nilai kolom str_col menjadi test dan mengatur nilai kolom dt_col menjadi waktu saat ini.
Fungsi manipulasi data
Fitur
Sintaks
Deskripsi parameter
Contoh
Hapus catatan data ini dan jangan sinkronkan
e_drop()
Tidak ada
e_if(op_gt(`id`, 10), e_drop()). Menghapus catatan di mana ID lebih besar dari 10.
Pertahankan catatan data ini dan sinkronkan ke tujuan
e_keep(condition)
condition: ekspresi boolean
e_keep(op_gt(id, 1)). Hanya menyinkronkan data di mana ID lebih besar dari 1.
Mengatur nilai kolom
e_set(`col`, val, NEW)
col: nama kolom
val: konstanta atau pemanggilan fungsi. Tipe harus sesuai dengan tipe col.
NEW: mengonversi tipe data kolom col ke tipe data val. Ini adalah bidang opsional.
PentingJika Anda tidak meneruskan NEW, jangan sertakan tanda koma (,) sebelumnya. Juga, pastikan kompatibilitas tipe data. Jika tidak, tugas mungkin melaporkan kesalahan.
e_set(`dt_col`, dt_now()). Mengatur dt_col ke waktu saat ini.
e_set(`col1`, `col2` + 1). Mengatur col1 menjadi col2+1.
e_set(`col1`, 1, NEW). Mengonversi kolom col1 ke tipe numerik dan mengatur nilainya menjadi 1.
Fitur MongoDB untuk mempertahankan bidang, menghapus bidang, dan memetakan nama bidang
e_expand_bson_value('*', 'fieldA',{"fieldB":"fieldC"})
*: nama bidang yang akan dipertahankan. Tanda bintang (*) menunjukkan semua bidang.
fieldA: nama bidang yang akan dihapus.
{"fieldB":"fieldC"}: pemetaan nama bidang. fieldB adalah nama bidang sumber, dan fieldC adalah nama bidang tujuan.
CatatanPemetaan nama bidang adalah ekspresi opsional.
e_expand_bson_value("*", "_id,name"). Menulis semua bidang kecuali bidang _id dan name ke tujuan.