全部产品
Search
文档中心

Data Transmission Service:Tambahkan kolom tambahan

更新时间:Jan 24, 2026

Saat membuat tugas sinkronisasi data atau migrasi di Data Transmission Service (DTS), Anda dapat menambahkan kolom tambahan ke tabel tujuan dan memberikan nilai untuk kolom tersebut. Setelah data ditulis ke tabel tujuan, Anda dapat memfilter berdasarkan nilai dalam kolom tambahan ini, sehingga memungkinkan operasi seperti manajemen metadata, pengurutan, dan penghapusan duplikat. Hal ini membantu Anda mengelola dan memproses data yang ditransfer ke tujuan dengan lebih baik.

Catatan

  • Anda dapat menambahkan kolom tambahan ke instans sinkronisasi atau migrasi dalam skenario berikut:

    • Database Type untuk database tujuan adalah DataHub, Lindorm, Kafka, atau ClickHouse.

    • Database Type untuk database sumber adalah DB2 for LUW atau DB2 for iSeries (AS/400), dan Database Type untuk database tujuan adalah MySQL atau PolarDB for MySQL.

    • Database Type database sumber adalah MySQL, MariaDB, atau PolarDB for MySQL, dan Database Type database tujuan adalah MySQL, MariaDB, atau PolarDB for MySQL.

    • Database Type database sumber adalah MySQL, dan Database Type database tujuan adalah Tair/Redis, AnalyticDB for PostgreSQL, atau AnalyticDB for MySQL 3.0.

    • Database Type untuk database sumber adalah PolarDB for PostgreSQL, dan Database Type untuk database tujuan adalah AnalyticDB for PostgreSQL.

    • Database Type untuk database sumber adalah SQL Server, dan Database Type untuk database tujuan adalah MySQL.

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

  • Sebelum mengubah aturan untuk kolom tambahan dalam tugas sinkronisasi data, pastikan nama kolom tambahan tidak bertentangan dengan kolom yang sudah ada di tabel tujuan.

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

  • Jika Anda mengklik kanan database di bagian Selected Objects, DTS akan menambahkan kolom tambahan yang dikonfigurasi ke semua tabel dalam database tujuan yang sesuai.

Prosedur

Bagian ini menggunakan contoh instans sinkronisasi DTS untuk menjelaskan cara menambahkan kolom tambahan.

  1. Buka halaman Tugas Sinkronisasi Data.

    1. Masuk ke Data Management (DMS) console.

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

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

    Catatan
  2. Klik Create Task dan konfigurasikan database sumber dan tujuan.

    Catatan

    Klik Reselect Objects untuk menambahkan kolom tambahan ke instans sinkronisasi yang sedang Running.

  3. Ikuti petunjuk hingga langkah Configure Objects untuk menyelesaikan konfigurasi.

    Anda dapat menambahkan kolom tambahan pada langkah ini.

    1. Atur Synchronization Types ke Schema Synchronization.

    2. Di bagian Source Objects, pilih database atau tabel yang ingin disinkronkan, lalu klik image.png untuk memindahkannya ke kotak Selected Objects.

    3. Di bagian Selected Objects, klik kanan database atau tabel yang ingin disinkronkan.

    4. Di bagian Additional Columns pada dialog, klik tombol Add Column.

    5. Masukkan Column Name, Type, dan Assign Value untuk kolom tambahan tersebut.

      Catatan

      Untuk Assign Value, Anda dapat mengklik ikon ... di sebelah kanan kotak teks untuk menyesuaikan ekspresi nilai kolom tambahan. Untuk informasi selengkapnya, lihat Assignment configuration.

    6. Klik OK.

  4. Ikuti petunjuk untuk menyelesaikan konfigurasi tugas sinkronisasi data lainnya.

    Catatan

    Jika fitur extract, transform, and load (ETL) dikonfigurasi untuk tugas sinkronisasi, data yang akan disinkronkan pertama-tama diproses oleh aturan kolom tambahan untuk menghasilkan nilai. Kemudian, skrip ETL diterapkan untuk menghitung nilai akhir, yang kemudian disinkronkan ke database tujuan.

Konfigurasi Penugasan

Nilai kolom tambahan terdiri dari konstanta, variabel, operator, dan fungsi ekspresi.

Catatan
  • Sintaks kompatibel dengan DSL (Domain-Specific Language) pemrosesan data untuk ETL.

  • Dalam ekspresi, nama kolom diapit tanda backtick (` `), bukan tanda kutip tunggal (' ').

  • Konstanta

    Type

    Contoh

    int

    123

    float

    123.4

    string

    "hello1_world"

    boolean

    true or false

    datetime

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

  • Variabel

    Variabel

    Deskripsi

    Tipe data

    Contoh nilai

    __TB__

    Nama tabel di database.

    string

    table

    __DB__

    Nama database.

    string

    mydb

    __OPERATION__

    Jenis operasi.

    string

    __OP_INSERT__,__OP_UPDATE__,__OP_DELETE__

    __COMMIT_TIMESTAMP__

    Waktu saat transaksi dikomit.

    datetime

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

    `column`

    Nilai kolom untuk catatan data.

    string

    `id`, `name`

    __SCN__

    System Change Number (SCN). Mencatat versi dan waktu komit transaksi di database dan bersifat unik.

    string

    22509****

    __ROW_ID__

    Catatan

    MySQL tidak mendukung __ROW_ID__.

    ID alamat catatan data. Menentukan lokasi data dan bersifat unik.

    string

    AAAgWHAAKAAJgX****

  • Fungsi ekspresi

    • Operasi numerik

      Fungsi

      Sintaks

      Rentang nilai

      Nilai kembali

      Contoh

      Penjumlahan (+)

      • op_sum(value1, value2)

      • value1+value2

      • value1: integer atau bilangan titik mengambang

      • value2: integer atau bilangan titik mengambang

      Jika kedua parameter berupa integer, maka dikembalikan integer. Jika tidak, dikembalikan bilangan titik mengambang.

      • op_sum(`col1`, 1.0)

      • `col1`+1.0

      Pengurangan (-)

      • op_sub(value1, value2)

      • value1-value2

      • value1: integer atau bilangan titik mengambang

      • value2: integer atau bilangan titik mengambang

      Jika kedua parameter berupa integer, maka dikembalikan integer. Jika tidak, dikembalikan bilangan titik mengambang.

      • op_sub(`col1`, 1.0)

      • `col1`-1.0

      Perkalian (*)

      • op_mul(value1, value2)

      • value1*value2

      • value1: integer atau bilangan titik mengambang

      • value2: integer atau bilangan titik mengambang

      Jika kedua parameter berupa integer, maka dikembalikan integer. Jika tidak, dikembalikan bilangan titik mengambang.

      • op_mul(`col1`, 1.0)

      • `col1`*1.0

      Pembagian (/)

      • op_div_true(value1, value2)

      • value1/value2

      • value1: integer atau bilangan titik mengambang

      • value2: integer atau bilangan titik mengambang

      Jika kedua parameter berupa integer, maka dikembalikan integer. Jika tidak, dikembalikan bilangan titik mengambang.

      • op_div_true(`col1`, 2.0). Jika col1=15, dikembalikan 7.5.

      • `col1`/1.0

      Operasi modulo

      op_mod(value1, value2)

      • value1: integer atau bilangan titik mengambang

      • value2: integer atau bilangan titik mengambang

      Jika kedua parameter berupa integer, maka dikembalikan integer. Jika tidak, dikembalikan bilangan titik mengambang.

      op_mod(`col1`, 10). Jika col1=23, dikembalikan 3.

    • Operasi logika

      Fitur

      Sintaks

      Rentang nilai

      Nilai kembali

      Contoh

      Sama dengan

      op_eq(value1, value2)

      • value1: integer, bilangan titik mengambang, atau string

      • value2: integer, bilangan titik mengambang, atau string

      boolean: true atau false

      op_eq(`col1`, 23)

      Lebih besar dari

      op_gt(value1, value2)

      • value1: integer, bilangan titik mengambang, atau string

      • value2: integer, bilangan titik mengambang, atau string

      boolean: true atau false

      op_gt(`col1`, 1.0)

      Lebih kecil dari

      op_lt(value1, value2)

      • value1: integer, bilangan titik mengambang, atau string

      • value2: integer, bilangan titik mengambang, atau string

      boolean: true atau false

      op_lt(`col1`, 1.0)

      Lebih besar dari atau sama dengan

      op_ge(value1, value2)

      • value1: integer, bilangan titik mengambang, atau string

      • value2: integer, bilangan titik mengambang, atau string

      boolean: true atau false

      op_ge(`col1`, 1.0)

      Lebih kecil dari atau sama dengan

      op_le(value1, value2)

      • value1: integer, bilangan titik mengambang, atau string

      • value2: integer, bilangan titik mengambang, atau string

      boolean: true atau false

      op_le(`col1`, 1.0)

      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 hasil gabungan

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

      Pemformatan dan penggabungan string

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

      • format: string yang menggunakan kurung kurawal ({}) sebagai placeholder, misalnya "part1: {}, part2: {}".

      • value1: tipe apa pun

      • value2: tipe apa pun

      String terformat

      str_format("part1: {}, part2: {}", `col1`, `col2`). Jika col1="ab" dan col2="12", dikembalikan "part1: ab, part2: 12".

      Penggantian string

      str_replace(original, oldStr, newStr, count)

      • original: string asli

      • oldStr: string yang akan diganti

      • newStr: string pengganti

      • count: integer yang menentukan jumlah maksimum penggantian. Jika parameter ini diatur ke -1, semua kemunculan akan diganti.

      String setelah penggantian

      str_replace(`name`, "a", 'b', 1). Jika name="aba", dikembalikan "bba". str_replace(`name`, "a", 'b', -1). Jika name="aba", dikembalikan "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 di 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 di awal dan akhir dihapus

      str_strip(`name`, 'ab'). Jika name=axbzb, dikembalikan xbz.

      Konversi string ke huruf kecil

      str_lower(value)

      value: kolom string atau konstanta string

      String huruf kecil

      str_lower(`str_col`)

      Konversi string ke huruf besar

      str_upper(value)

      value: kolom string atau konstanta string

      String huruf besar

      str_upper(`str_col`)

      Konversi string ke angka

      cast_string_to_long(value)

      value: string

      Integer

      cast_string_to_long(`col`)

      Konversi angka ke string

      cast_long_to_string(value)

      value: integer

      String

      cast_long_to_string(`col`)

      Hitung kemunculan substring

      str_count(str,pattern)

      • str: kolom string atau konstanta string

      • pattern: substring yang dicari

      Jumlah kemunculan substring

      str_count(`str_col`, 'abc'). Jika str_col="zabcyabcz", dikembalikan 2.

      Cari substring

      str_find(str, pattern)

      • str: kolom string atau konstanta string

      • pattern: substring yang dicari

      Posisi kecocokan pertama substring. Jika tidak ditemukan, dikembalikan `-1`.

      str_find(`str_col`, 'abc'). Jika `str_col="xabcy"`, dikembalikan `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+')

      Samarkan 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: integer yang menentukan posisi awal penyamaran. Nilai minimum adalah 0.

      • end: integer 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, '#')

      Ambil substring setelah string tertentu

      substring_after(str, cond)

      • str: string asli

      • cond: string

      String

      Catatan

      Nilai kembali tidak termasuk string cond.

      substring_after(`col`, 'abc')

      Ambil substring sebelum string tertentu

      substring_before(str, cond)

      • str: string asli

      • cond: string

      String

      Catatan

      Nilai kembali tidak termasuk string cond.

      substring_before(`col`, 'efg')

      Ambil substring di antara dua string tertentu

      substring_between(str, cond1, cond2)

      • str: string asli

      • cond1: string

      • cond2: string

      String

      Catatan

      Nilai kembali tidak termasuk string cond1 dan cond2.

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

      Periksa apakah nilai berupa string

      is_string_value(value)

      value: string atau nama kolom

      boolean: true atau false

      is_string_value(`col1`)

      Ganti konten di bidang bertipe string, dimulai dari akhir secara terbalik.

      tail_replace_string_field(search, replace, all)

      search: string yang akan diganti

      replace: string pengganti

      all: menentukan apakah akan mengganti semua kemunculan. Nilainya bisa true atau false.

      String setelah penggantian

      Ganti "\u000f" dengan spasi di nilai semua bidang bertipe string.

      tail_replace_string_field('\u000f','',true)

      Ambil 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"))

    • Ekspresi kondisional

      Fitur

      Sintaks

      Rentang nilai

      Nilai kembali

      Contoh

      Menyerupai 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, dikembalikan val_1. Jika tidak, dikembalikan val_2.

      (id>1000? 1 : 0)

    • 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()

      Konversi timestamp UTC (dalam detik) ke DATETIME

      dt_fromtimestamp(value,[timezone])

      • value: integer

      • timezone: zona waktu. Ini adalah parameter opsional.

      DATETIME, akurat hingga detik

      dt_fromtimestamp(1626837629)

      dt_fromtimestamp(1626837629,'GMT+08')

      Konversi timestamp UTC (dalam milidetik) ke DATETIME

      dt_fromtimestamp_millis(value,[timezone])

      • value: integer

      • timezone: zona waktu. Ini adalah parameter opsional.

      DATETIME, akurat hingga milidetik

      dt_fromtimestamp_millis(1626837629123);

      dt_fromtimestamp_millis(1626837629123,'GMT+08')

      Konversi DATETIME ke timestamp UTC (dalam detik)

      dt_parsetimestamp(value,[timezone])

      • value: DATETIME

      • timezone: zona waktu. Ini adalah parameter opsional.

      Integer

      dt_parsetimestamp(`datetime_col`)

      dt_parsetimestamp(`datetime_col`,'GMT+08')

      Konversi DATETIME ke timestamp UTC (dalam milidetik)

      dt_parsetimestamp_millis(value,[timezone])

      • value: DATETIME

      • timezone: zona waktu. Ini adalah parameter opsional.

      Integer

      dt_parsetimestamp_millis(`datetime_col`)

      dt_parsetimestamp_millis(`datetime_col`,'GMT+08')

      Konversi DATETIME ke string

      dt_str(value, format)

      • value: DATETIME

      • format: string dalam format yyyy-MM-dd HH:mm:ss

      String

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

      Konversi string ke DATETIME

      dt_strptime(value,format)

      • value: string

      • format: string dalam format yyyy-MM-dd HH:mm:ss

      DATETIME

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

      Ubah 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: integer

        Catatan

        Tanda minus (-) menunjukkan pengurangan.

      DATETIME

      • dt_add(datetime_col,years=-1)

      • dt_add(datetime_col,years=1,months=1)

FAQ

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

Deskripsi skenario

Saat menyinkronkan atau memigrasikan data dari MySQL ke Redis, DTS menyediakan tiga Cache Mapping Mode yang secara default memetakan seluruh baris data. Untuk mengekstrak hanya kolom tertentu dan membuat pasangan kunci-nilai, Anda harus menggunakan konfigurasi kustom.

image

Metode konfigurasi

  1. Saat mengonfigurasi objek, pindahkan database dan tabel yang ingin disinkronkan atau dimigrasikan ke panel kanan, lalu klik tombol edit untuk DB Redis tujuan.

    image

  2. Tambahkan kolom berikut: __DTS_TP_TO_REDIS_KEY__ dan __DTS_TP_TO_REDIS_VALUE__.

    image

  3. Sesuaikan penugasan nilai berdasarkan sintaks DSL. Sebagai contoh, pertimbangkan tabel MySQL aes:

    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';

    Skenario bisnis:

    • Kuncinya adalah stat_create_day:{gcp_code}:{uname}. Kunci ini menggunakan dua bidang dari tabel aes: gcp_code dan uname.

    • Nilainya adalah {login_time} . Nilai ini menggunakan satu bidang yang harus dikonversi ke format datetime.

    Referensi penugasan nilai:

    • Nilai untuk __DTS_TP_TO_REDIS_KEY__: 'stat_create_day'+':'+`gcp_code`+':'+`uname`

    • Nilai untuk __DTS_TP_TO_REDIS_VALUE__: dt_fromtimestamp(cast_string_to_long(`login_time`))

  4. Setelah data disinkronkan atau dimigrasikan ke Redis, pasangan kunci-nilai akan tampak sebagai berikut: image