All Products
Search
Document Center

Data Transmission Service:Tambahkan kolom tambahan

Last Updated:Sep 01, 2026

Saat membuat tugas sinkronisasi data atau migrasi di Data Transmission Service (DTS), Anda dapat menambahkan kolom ekstra ke tabel tujuan dan memberikan nilai padanya. Setelah data tiba di tujuan, Anda dapat memfilter berdasarkan nilai kolom tersebut untuk melakukan manajemen metadata, deduplikasi, dan pengurutan.

Skenario yang didukung

Kolom tambahan didukung dalam kombinasi sumber-tujuan berikut:

Source database type

Destination database type

Any

DataHub, Lindorm, Kafka, atau ClickHouse

DB2 for LUW atau DB2 for iSeries (AS/400)

MySQL atau PolarDB for MySQL

MySQL, MariaDB, atau PolarDB for MySQL

MySQL, MariaDB, atau PolarDB for MySQL

MySQL

Tair/Redis, AnalyticDB for PostgreSQL, atau AnalyticDB for MySQL 3.0

PolarDB for PostgreSQL

AnalyticDB for PostgreSQL

SQL Server

MySQL

Catatan penggunaan

  • Untuk instans sinkronisasi, atur Synchronization Types ke Schema Synchronization. Untuk instans migrasi, atur Migration Types ke Schema Migration.

  • Sebelum mengubah aturan kolom tambahan pada tugas sinkronisasi yang sedang Berjalan, periksa apakah nama kolom bertentangan dengan kolom yang sudah ada di tabel tujuan.

  • Jika database sumber adalah MongoDB, koleksi tujuan tidak boleh berisi bidang bernama _id atau _value. Jika tidak, sinkronisasi akan gagal.

  • Mengklik kanan database di Selected Objects menerapkan kolom tambahan yang dikonfigurasi ke semua tabel dalam database tujuan tersebut.

  • Jika extract, transform, and load (ETL) dikonfigurasi pada tugas sinkronisasi, aturan kolom tambahan dijalankan terlebih dahulu untuk menghasilkan nilai, lalu skrip ETL menghitung nilai akhir yang disinkronkan ke tujuan.

Tambahkan kolom tambahan ke tugas sinkronisasi

Langkah-langkah berikut menggunakan instans sinkronisasi sebagai contoh. Pendekatan yang sama berlaku untuk instans migrasi.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Konfigurasi kolom tambahan

  1. Buka halaman Tugas Sinkronisasi Data.Halaman Tugas Sinkronisasi Data di konsol DTS baru

    1. Login ke Konsol Data Management (DMS).

    2. Di bilah navigasi atas, klik Data + AI.

    3. Di panel navigasi kiri, pilih DTS (DTS) > Data Synchronization.

    Jalur navigasi dapat berbeda tergantung pada mode konsol DMS. Untuk detailnya, lihat Konsol mode sederhana dan Menyesuaikan tata letak dan gaya konsol DMS. Anda juga dapat langsung membuka Halaman Tugas Sinkronisasi Data di konsol DTS baru.
  2. Klik Create Task dan konfigurasikan database sumber dan tujuan.

    Untuk menambahkan kolom tambahan ke instans sinkronisasi yang Running, klik Reselect Objects sebagai gantinya.
  3. Ikuti petunjuk hingga langkah Configure Objects.

  4. Atur Synchronization Types ke Schema Synchronization.

  5. Di Source Objects, pilih database atau tabel yang akan disinkronkan, lalu klik image.png untuk memindahkannya ke Selected Objects.

  6. Di Selected Objects, klik kanan database atau tabel.

  7. Di kotak dialog, buka bagian Additional Columns dan klik Add Column.

  8. Masukkan Column Name, Type, dan Assign Value untuk kolom baru.

    • Column Name dan Type mendefinisikan kolom yang ditambahkan ke tabel tujuan.

    • Assign Value adalah ekspresi yang mereferensi kolom tabel sumber atau variabel bawaan. Klik ikon ... untuk membuka editor ekspresi. Untuk detail sintaksis, lihat Referensi ekspresi.

  9. Klik OK.

  10. Ikuti petunjuk untuk menyelesaikan konfigurasi tugas lainnya.

Referensi ekspresi

Nilai kolom tambahan dibuat dari konstanta, variabel, operator, dan fungsi ekspresi. Sintaksisnya kompatibel dengan DSL (Domain-Specific Language) pemrosesan data yang digunakan untuk ETL.

Dalam ekspresi, sertakan nama kolom dalam backtick (`col`), bukan tanda kutip tunggal ('col').

Kasus penggunaan umum

Sebelum membahas referensi lengkap, berikut adalah pola paling umum:

Tujuan

Pola ekspresi

Memberi tag setiap baris dengan nama tabel sumbernya

__TB__

Memberi tag setiap baris dengan nama database sumbernya

__DB__

Mencatat jenis operasi (insert/update/delete)

__OPERATION__

Mencatat waktu transaksi dikomit

__COMMIT_TIMESTAMP__

Membuat kunci komposit dari kolom sumber

'prefix:'+col1+':'+col2

Penyisipan bertanda dibandingkan dengan operasi lainnya

(op_eq(__OPERATION__,'__OP_INSERT__')? 1 : 0)

Menyamarkan data sensitif dalam suatu kolom

str_mask(phone, 7, 10, '#')

Konstanta

Tipe

Contoh

int

123

float

123.4

string

"hello1_world"

boolean

true atau false

datetime

DATETIME('2021-01-01 10:10:01')

Variabel

Gunakan variabel bawaan ini untuk menangkap metadata tentang setiap baris yang direplikasi.

Variabel

Deskripsi

Tipe data

Contoh nilai

__TB__

Nama tabel sumber

string

table

__DB__

Nama database sumber

string

mydb

__OPERATION__

Jenis operasi DML

string

__OP_INSERT__, __OP_UPDATE__, __OP_DELETE__

__COMMIT_TIMESTAMP__

Waktu transaksi dikomit

datetime

'2021-01-01 10:10:01'

column

Nilai kolom sumber untuk baris saat ini

string

id , name

__SCN__

System Change Number (SCN) — secara unik mengidentifikasi versi dan waktu komit transaksi

string

22509****

__ROW_ID__

ID alamat catatan data — secara unik menentukan lokasi baris tersebut. Tidak didukung untuk sumber MySQL.

string

AAAgWHAAKAAJgX****

Fungsi ekspresi

Operasi numerik

Fungsi

Sintaksis

Parameter

Nilai kembalian

Contoh

Penjumlahan

op_sum(value1, value2) atau value1+value2

value1, value2: integer atau float

Integer jika kedua input integer; float jika tidak

op_sum(col1, 1.0)

Pengurangan

op_sub(value1, value2) atau value1-value2

value1, value2: integer atau float

Integer jika kedua input integer; float jika tidak

op_sub(col1, 1.0)

Perkalian

op_mul(value1, value2) atau value1*value2

value1, value2: integer atau float

Integer jika kedua input integer; float jika tidak

op_mul(col1, 1.0)

Pembagian

op_div_true(value1, value2) atau value1/value2

value1, value2: integer atau float

Integer jika kedua input integer; float jika tidak

op_div_true(col1, 2.0) — jika col1=15, mengembalikan 7.5

Modulo

op_mod(value1, value2)

value1, value2: integer atau float

Integer jika kedua input integer; float jika tidak

op_mod(col1, 10) — jika col1=23, mengembalikan 3

Operasi logika

Fungsi

Sintaksis

Parameter

Nilai kembalian

Contoh

Sama dengan

op_eq(value1, value2)

integer, float, atau string

boolean

op_eq(col1, 23)

Lebih besar dari

op_gt(value1, value2)

integer, float, atau string

boolean

op_gt(col1, 1.0)

Lebih kecil dari

op_lt(value1, value2)

integer, float, atau string

boolean

op_lt(col1, 1.0)

Lebih besar dari atau sama dengan

op_ge(value1, value2)

integer, float, atau string

boolean

op_ge(col1, 1.0)

Lebih kecil dari atau sama dengan

op_le(value1, value2)

integer, float, atau string

boolean

op_le(col1, 1.0)

AND

op_and(value1, value2)

boolean

boolean

op_and(is_male, is_student)

OR

op_or(value1, value2)

boolean

boolean

op_or(is_male, is_student)

IN

op_in(value, json_array)

value: tipe apa pun; json_array: string format JSON

boolean

op_in(id,json_array('["0","1","2","3","4","5","6","7","8"]'))

Is null

op_is_null(value)

tipe apa pun

boolean

op_is_null(name)

Is not null

op_is_not_null(value)

tipe apa pun

boolean

op_is_not_null(name)

Fungsi string

Fungsi

Sintaksis

Parameter

Nilai kembalian

Contoh

Gabungkan string

op_add(str_1, str_2, ..., str_n)

strings

String hasil penggabungan

op_add(col,'hangzhou','dts')

Format dan gabungkan

str_format(format, value1, value2, ...)

format: string dengan placeholder {}

String terformat

str_format("part1: {}, part2: {}", col1, col2) — jika col1="ab" dan col2="12", mengembalikan "part1: ab, part2: 12"

Ganti substring

str_replace(original, oldStr, newStr, count)

count: jumlah maksimum penggantian; -1 mengganti semua

String setelah penggantian

str_replace(name, "a", 'b', -1) — jika name="aba", mengembalikan "bbb"

Ganti di semua bidang string

tail_replace_string_field(search, replace, all)

all: hanya true yang didukung

String setelah penggantian

tail_replace_string_field('\u000f','',true) — mengganti \u000f dengan string kosong di semua bidang varchar, text, dan char

Hapus karakter

str_strip(string_val, charSet)

charSet: karakter yang akan dihapus

String dengan karakter awal/akhir dihapus

str_strip(name, 'ab') — jika name="axbzb", mengembalikan "xbz"

Konversi ke huruf kecil

str_lower(value)

kolom string atau konstanta

String huruf kecil

str_lower(str_col)

Konversi ke huruf besar

str_upper(value)

kolom string atau konstanta

String huruf besar

str_upper(str_col)

String ke integer

cast_string_to_long(value)

string

Integer

cast_string_to_long(col)

Integer ke string

cast_long_to_string(value)

integer

String

cast_long_to_string(col)

Hitung kemunculan

str_count(str, pattern)

str: string; pattern: substring yang dicari

Jumlah kemunculan

str_count(str_col, 'abc') — jika str_col="zabcyabcz", mengembalikan 2

Cari substring

str_find(str, pattern)

str: string; pattern: substring yang dicari

Posisi kecocokan pertama; -1 jika tidak ditemukan

str_find(str_col, 'abc') — jika str_col="xabcy", mengembalikan 1

Periksa apakah semua huruf

str_isalpha(str)

kolom string atau konstanta

boolean

str_isalpha(str_col)

Periksa apakah semua karakter merupakan digit.

str_isdigit(str)

kolom string atau konstanta

boolean

str_isdigit(str_col)

Pencocokan ekspresi reguler

regex_match(str, regex)

str: string; regex: pola regex

boolean

regex_match(__TB__,'user_\\\d+')

Sembunyikan sebagian string

str_mask(str, start, end, maskStr)

start: posisi awal (min: 0); end: posisi akhir (maks: panjang−1); maskStr: satu karakter

String yang disembunyikan

str_mask(phone, 7, 10, '#')

Ambil substring setelah string

substring_after(str, cond)

str: string asli; cond: pembatas

Substring setelah cond (pembatas tidak termasuk)

substring_after(col, 'abc')

Ambil substring sebelum string

substring_before(str, cond)

str: string asli; cond: pembatas

Substring sebelum cond (pembatas tidak termasuk)

substring_before(col, 'efg')

Ambil substring di antara dua string

substring_between(str, cond1, cond2)

str: string asli; cond1, cond2: pembatas

Substring di antara cond1 dan cond2 (pembatas tidak termasuk)

substring_between(col, 'abc','efg')

Periksa apakah nilai adalah string

is_string_value(value)

string atau nama kolom

boolean

is_string_value(col1)

Ambil bidang dari dokumen MongoDB

bson_value("field1", "field2", ...)

Jalur bidang bersarang

Nilai bidang

e_set(user_name, bson_value("person","name"))

Ekspresi kondisional

Sintaksis

Parameter

Nilai kembalian

Contoh

(cond ? val_1 : val_2)

cond: boolean; val_1 dan val_2: tipe yang sama

val_1 jika cond true; val_2 jika tidak

(id>1000? 1 : 0)

Fungsi waktu

Fungsi

Sintaksis

Parameter

Nilai kembalian

Contoh

Waktu saat ini (presisi detik)

dt_now()

Tidak ada

DATETIME, akurat hingga detik

dt_now()

Waktu saat ini (presisi milidetik)

dt_now_millis()

Tidak ada

DATETIME, akurat hingga milidetik

dt_now_millis()

Timestamp UTC (detik) ke DATETIME

dt_fromtimestamp(value, [timezone])

value: integer; timezone: opsional

DATETIME, akurat hingga detik

dt_fromtimestamp(1626837629,'GMT+08')

Timestamp UTC (milidetik) ke DATETIME

dt_fromtimestamp_millis(value, [timezone])

value: integer; timezone: opsional

DATETIME, akurat hingga milidetik

dt_fromtimestamp_millis(1626837629123,'GMT+08')

DATETIME ke timestamp UTC (detik)

dt_parsetimestamp(value, [timezone])

value: DATETIME; timezone: opsional

Integer

dt_parsetimestamp(datetime_col,'GMT+08')

DATETIME ke timestamp UTC (milidetik)

dt_parsetimestamp_millis(value, [timezone])

value: DATETIME; timezone: opsional

Integer

dt_parsetimestamp_millis(datetime_col,'GMT+08')

DATETIME ke string

dt_str(value, format)

value: DATETIME; format: yyyy-MM-dd HH:mm:ss

String

dt_str(col1, 'yyyy-MM-dd HH:mm:ss')

String ke DATETIME

dt_strptime(value, format)

value: string; format: yyyy-MM-dd HH:mm:ss

DATETIME

dt_strptime('2021-07-21 03:20:29', 'yyyy-MM-dd hh:mm:ss')

Sesuaikan DATETIME

dt_add(value, [years=intVal], [months=intVal], [days=intVal], [hours=intVal], [minutes=intVal])

value: DATETIME; intVal: integer (negatif berarti mengurangi)

DATETIME

dt_add(datetime_col,years=-1)

Fungsi global

  • Fungsi kontrol alur

    Fungsi

    Sintaksis

    Parameter

    Contoh

    pernyataan if

    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.

    pernyataan if-else

    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 menjadi "large" jika ID > 10, jika tidak menjadi "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, mengeksekusi fungsi ini dan keluar dari switch. Jika false, memeriksa 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. Bisa berupa e_set, e_drop, e_if.

    • func2: pemanggilan fungsi. Bisa berupa e_set, e_drop, e_if.

    e_compose(e_set(`str_col`, 'test'), e_set(`dt_col`, dt_now())); mengatur str_col menjadi "test" dan dt_col menjadi waktu saat ini.

  • Fungsi manipulasi data

    Fungsi

    Sintaksis

    Parameter

    Contoh

    Hapus catatan ini (jangan sinkronkan)

    e_drop()

    Tidak ada

    e_if(op_gt(`id`, 10), e_drop()); menghapus catatan di mana ID > 10.

    Pertahankan catatan ini (sinkronkan ke tujuan)

    e_keep(condition)

    condition: ekspresi boolean

    e_keep(op_gt(id, 1)); hanya menyinkronkan catatan di mana ID > 1.

    Atur nilai kolom

    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)

      Penting

      Jika 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 dipertahankan; * berarti semua bidang.

    • fieldA: nama bidang yang dihapus.

    • {"fieldB":"fieldC"}: pemetaan nama bidang; fieldB adalah nama bidang sumber, fieldC adalah nama bidang tujuan.

      Catatan

      Pemetaan nama bidang bersifat opsional.

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

FAQ

Bagaimana cara mengonfigurasi kunci dan nilai kustom untuk tugas DTS dari MySQL ke Redis?

Secara default, DTS memetakan seluruh baris sumber menggunakan salah satu dari tiga opsi Cache Mapping Mode. Untuk mengekstrak kolom tertentu dan membangun pasangan kunci-nilai kustom sebagai gantinya, tambahkan dua kolom tambahan khusus: __DTS_TP_TO_REDIS_KEY__ dan __DTS_TP_TO_REDIS_VALUE__.

Tiga mode pemetaan data cache adalah sebagai berikut:

  • KV Model (Database-Table-Primary Key)

  • HASH Model (Database-Table-Primary Key)

  • HASH Model (Database-Table)

Anda juga perlu mengonfigurasi Value Data Splitting Method (opsi: JSON format, Key-Value comma-separated, atau Value comma-separated), serta memilih jenis operasi DML yang akan disinkronkan (INSERT, UPDATE, DELETE).

Langkah konfigurasi:

  1. Saat mengonfigurasi objek, pindahkan database dan tabel ke panel kanan, lalu klik tombol edit untuk database Redis tujuan.

  2. Tambahkan kolom __DTS_TP_TO_REDIS_KEY__ dan __DTS_TP_TO_REDIS_VALUE__.

  3. Atur ekspresi Assign Value menggunakan sintaksis DSL. Sebagai contoh, pertimbangkan tabel MySQL aes berikut:

    CREATE TABLE `aes` (
        `id`            BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Auto-increment primary key',
        `login_time`    INT(10)             NOT NULL DEFAULT '0'    COMMENT 'Logon identifier time',
        `pay_time`      INT(10)             NOT NULL DEFAULT '0'    COMMENT 'Payment identifier time',
        `gid`           INT(10)             NOT NULL DEFAULT '0'    COMMENT 'Game ID',
        `cid`           INT(10)             NOT NULL DEFAULT '0'    COMMENT 'Channel ID',
        `gcp_code`      VARCHAR(40)         NOT NULL DEFAULT ''     COMMENT 'Channel package number. An empty value indicates a new entry for the gid.',
        `uname`         VARCHAR(120)        CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Account',
        PRIMARY KEY (`id`),
        UNIQUE KEY `idx_uq` (`gid`, `gcp_code`, `uname`),
        KEY `idx_uname` (`uname`)
    )ENGINE=InnoDB AUTO_INCREMENT=48022 DEFAULT CHARSET=utf8 COMMENT='Game account activation time information table';

    Kebutuhan bisnis:

    • Kunci: stat_create_day:{gcp_code}:{uname} — dibuat dari dua kolom sumber

    • Nilai: {login_time} — timestamp Unix yang dikonversi ke format datetime

    Ekspresi Assign Value:

    • __DTS_TP_TO_REDIS_KEY__: 'stat_create_day'+':'+gcp_code+':'+uname

    • __DTS_TP_TO_REDIS_VALUE__: dt_fromtimestamp(cast_string_to_long(login_time))

  4. Setelah sinkronisasi atau migrasi selesai, pasangan kunci-nilai di Redis muncul sebagai berikut:

    Setelah sinkronisasi data selesai, sambungkan ke instans Redis tujuan melalui DMS. Di DB0, jalankan perintah get pada kunci dengan pola stat_create_day:{gcp_code}:{uname}. Nilai yang dikembalikan dalam format datetime (misalnya, 2025-11-18 23:49:29), yang mengonfirmasi bahwa fungsi dt_fromtimestamp telah mengonversi timestamp Unix ke nilai datetime dengan benar.