全部产品
Search
文档中心

Data Transmission Service:Konfigurasikan ETL dalam tugas migrasi atau sinkronisasi DTS

更新时间:Nov 21, 2025

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.

Catatan

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

  • AnalyticDB for MySQL 3.0

  • SQL Server

  • MySQL

  • PolarDB for MySQL

MySQL

  • AnalyticDB for MySQL 3.0

  • AnalyticDB for PostgreSQL

  • Kafka

  • ApsaraDB for ClickHouse cluster

  • MySQL

  • PolarDB for MySQL

  • Elasticsearch

  • Redis

Self-managed Oracle

  • AnalyticDB 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.0

  • Kafka

  • Tablestore

PolarDB-X 2.0

  • PolarDB-X 2.0

  • AnalyticDB for MySQL 3.0

  • MySQL

  • PolarDB for MySQL

Self-managed Db2 for LUW

MySQL

Self-managed Db2 for i

MySQL

PolarDB for PostgreSQL

  • PolarDB for PostgreSQL

  • PostgreSQL

PostgreSQL

  • PolarDB for PostgreSQL

  • PostgreSQL

TiDB

  • PolarDB for MySQL

  • MySQL

  • AnalyticDB for MySQL 3.0

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 kolom new_column secara 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_compose untuk 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_set dalam 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

  1. Buat tugas sinkronisasi. Untuk informasi lebih lanjut, lihat Solusi sinkronisasi.

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

  3. Di kotak teks, masukkan pernyataan transformasi data (ETL) berdasarkan Sintaks DSL pemrosesan data.

    Catatan

    Sebagai 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_gt adalah fungsi kondisional yang memeriksa apakah suatu nilai lebih besar dari nilai lainnya, sedangkan id adalah variabel. Skrip ini menyaring catatan dengan ID lebih besar dari 3.

  4. 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.

    Penting
    • Sebelum 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_compose untuk 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_set dalam 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

  1. Masuk ke Halaman Tugas Sinkronisasi Data di konsol DTS baru.

  2. Pada baris tugas sinkronisasi target, klik ikon 点点点 lalu pilih Modify ETL Configuration.

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

  4. Di kotak teks, masukkan pernyataan transformasi data (ETL) berdasarkan Sintaks DSL pemrosesan data.

    Catatan

    Sebagai 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_gt adalah fungsi kondisional yang memeriksa apakah suatu nilai lebih besar dari nilai lainnya, sedangkan id adalah variabel. Skrip ini menyaring catatan dengan ID lebih besar dari 3.

  5. 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.

Catatan
  • 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__))
    Catatan

    Untuk 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__)
)
Catatan

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)

    Catatan

    Operasi DELETE hanya memiliki citra sebelumnya.

    Tanda khusus, tidak memiliki tipe

    v(`column_name`,__BEFORE__)

    __AFTER__

    Citra setelah operasi UPDATE (nilai setelah pembaruan)

    Catatan

    Operasi 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.

      Catatan

      Jika 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

    Catatan

    Nilai 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

    Catatan

    Nilai 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

    Catatan

    Nilai 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

      Catatan

      Tanda 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

      Catatan

      val_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

    Catatan

    Tipe `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)

    Catatan

    Fungsi 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

    Catatan
    • Jika 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

    Catatan
    • Jika 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

    Catatan
    • Jika 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

    Catatan
    • Jika 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

    Catatan

    Jika 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). true dikembalikan.

    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'). true dikembalikan.

    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'). 1 dikembalikan.

    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'). 1 dikembalikan.

    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.

      Catatan

      Jika nilai jsonPath adalah "$", ini setara dengan json_length(json).

    Bilangan bulat

    json_length('{"ID":1,"Address":["City","Xian","Number",1]}','$'). 2 dikembalikan.

    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]}'). 2 dikembalikan.

    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.

      Penting

      Jika 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.

      Catatan

      Pemetaan nama bidang adalah ekspresi opsional.

    e_expand_bson_value("*", "_id,name"). Menulis semua bidang kecuali bidang _id dan name ke tujuan.