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:
Instans sinkronisasi atau migrasi DTS dalam skema yang didukung
Akses ke Konsol Data Management (DMS) atau Konsol DTS
Konfigurasi kolom tambahan
Buka halaman Tugas Sinkronisasi Data.Halaman Tugas Sinkronisasi Data di konsol DTS baru
Login ke Konsol Data Management (DMS).
Di bilah navigasi atas, klik Data + AI.
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.
Klik Create Task dan konfigurasikan database sumber dan tujuan.
Untuk menambahkan kolom tambahan ke instans sinkronisasi yang Running, klik Reselect Objects sebagai gantinya.
Ikuti petunjuk hingga langkah Configure Objects.
Atur Synchronization Types ke Schema Synchronization.
Di Source Objects, pilih database atau tabel yang akan disinkronkan, lalu klik
untuk memindahkannya ke Selected Objects.Di Selected Objects, klik kanan database atau tabel.
Di kotak dialog, buka bagian Additional Columns dan klik Add Column.
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.
Klik OK.
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 |
|
Memberi tag setiap baris dengan nama database sumbernya |
|
Mencatat jenis operasi (insert/update/delete) |
|
Mencatat waktu transaksi dikomit |
|
Membuat kunci komposit dari kolom sumber |
|
Penyisipan bertanda dibandingkan dengan operasi lainnya |
|
Menyamarkan data sensitif dalam suatu kolom |
|
Konstanta
Tipe | Contoh |
int |
|
float |
|
string |
|
boolean |
|
datetime |
|
Variabel
Gunakan variabel bawaan ini untuk menangkap metadata tentang setiap baris yang direplikasi.
Variabel | Deskripsi | Tipe data | Contoh nilai |
| Nama tabel sumber | string |
|
| Nama database sumber | string |
|
| Jenis operasi DML | string |
|
| Waktu transaksi dikomit | datetime |
|
| Nilai kolom sumber untuk baris saat ini | string |
|
| System Change Number (SCN) — secara unik mengidentifikasi versi dan waktu komit transaksi | string |
|
| ID alamat catatan data — secara unik menentukan lokasi baris tersebut. Tidak didukung untuk sumber MySQL. | string |
|
Fungsi ekspresi
Operasi numerik
Fungsi | Sintaksis | Parameter | Nilai kembalian | Contoh |
Penjumlahan |
|
| Integer jika kedua input integer; float jika tidak |
|
Pengurangan |
|
| Integer jika kedua input integer; float jika tidak |
|
Perkalian |
|
| Integer jika kedua input integer; float jika tidak |
|
Pembagian |
|
| Integer jika kedua input integer; float jika tidak |
|
Modulo |
|
| Integer jika kedua input integer; float jika tidak |
|
Operasi logika
Fungsi | Sintaksis | Parameter | Nilai kembalian | Contoh |
Sama dengan |
| integer, float, atau string | boolean |
|
Lebih besar dari |
| integer, float, atau string | boolean |
|
Lebih kecil dari |
| integer, float, atau string | boolean |
|
Lebih besar dari atau sama dengan |
| integer, float, atau string | boolean |
|
Lebih kecil dari atau sama dengan |
| integer, float, atau string | boolean |
|
AND |
| boolean | boolean |
|
OR |
| boolean | boolean |
|
IN |
|
| boolean |
|
Is null |
| tipe apa pun | boolean |
|
Is not null |
| tipe apa pun | boolean |
|
Fungsi string
Fungsi | Sintaksis | Parameter | Nilai kembalian | Contoh |
Gabungkan string |
| strings | String hasil penggabungan |
|
Format dan gabungkan |
|
| String terformat |
|
Ganti substring |
|
| String setelah penggantian |
|
Ganti di semua bidang string |
|
| String setelah penggantian |
|
Hapus karakter |
|
| String dengan karakter awal/akhir dihapus |
|
Konversi ke huruf kecil |
| kolom string atau konstanta | String huruf kecil |
|
Konversi ke huruf besar |
| kolom string atau konstanta | String huruf besar |
|
String ke integer |
| string | Integer |
|
Integer ke string |
| integer | String |
|
Hitung kemunculan |
|
| Jumlah kemunculan |
|
Cari substring |
|
| Posisi kecocokan pertama; |
|
Periksa apakah semua huruf |
| kolom string atau konstanta | boolean |
|
Periksa apakah semua karakter merupakan digit. |
| kolom string atau konstanta | boolean |
|
Pencocokan ekspresi reguler |
|
| boolean |
|
Sembunyikan sebagian string |
|
| String yang disembunyikan |
|
Ambil substring setelah string |
|
| Substring setelah |
|
Ambil substring sebelum string |
|
| Substring sebelum |
|
Ambil substring di antara dua string |
|
| Substring di antara |
|
Periksa apakah nilai adalah string |
| string atau nama kolom | boolean |
|
Ambil bidang dari dokumen MongoDB |
| Jalur bidang bersarang | Nilai bidang |
|
Ekspresi kondisional
Sintaksis | Parameter | Nilai kembalian | Contoh |
|
|
|
|
Fungsi waktu
Fungsi | Sintaksis | Parameter | Nilai kembalian | Contoh |
Waktu saat ini (presisi detik) |
| Tidak ada | DATETIME, akurat hingga detik |
|
Waktu saat ini (presisi milidetik) |
| Tidak ada | DATETIME, akurat hingga milidetik |
|
Timestamp UTC (detik) ke DATETIME |
|
| DATETIME, akurat hingga detik |
|
Timestamp UTC (milidetik) ke DATETIME |
|
| DATETIME, akurat hingga milidetik |
|
DATETIME ke timestamp UTC (detik) |
|
| Integer |
|
DATETIME ke timestamp UTC (milidetik) |
|
| Integer |
|
DATETIME ke string |
|
| String |
|
String ke DATETIME |
|
| DATETIME |
|
Sesuaikan DATETIME |
|
| DATETIME |
|
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)
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 dipertahankan; * berarti semua bidang.
fieldA: nama bidang yang dihapus.
{"fieldB":"fieldC"}: pemetaan nama bidang; fieldB adalah nama bidang sumber, fieldC adalah nama bidang tujuan.
CatatanPemetaan 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:
Saat mengonfigurasi objek, pindahkan database dan tabel ke panel kanan, lalu klik tombol edit untuk database Redis tujuan.
Tambahkan kolom
__DTS_TP_TO_REDIS_KEY__dan__DTS_TP_TO_REDIS_VALUE__.Atur ekspresi Assign Value menggunakan sintaksis DSL. Sebagai contoh, pertimbangkan tabel MySQL
aesberikut: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 sumberNilai:
{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))
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
getpada kunci dengan polastat_create_day:{gcp_code}:{uname}. Nilai yang dikembalikan dalam format datetime (misalnya,2025-11-18 23:49:29), yang mengonfirmasi bahwa fungsidt_fromtimestamptelah mengonversi timestamp Unix ke nilai datetime dengan benar.