全部产品
Search
文档中心

Data Transmission Service:Tetapkan kondisi filter

更新时间:Feb 07, 2026

Saat mengonfigurasi task sinkronisasi atau migrasi data, Anda dapat menetapkan kondisi filter untuk menyinkronkan atau memigrasikan hanya data dari database sumber yang memenuhi persyaratan tertentu. Fitur ini umum digunakan dalam skenario seperti sharding dan sinkronisasi atau migrasi data parsial.

Prasyarat

Task saat ini harus berada pada fase Configure Objects. Untuk petunjuk cara mencapai fase ini, lihat dokumen konfigurasi terkait di Ikhtisar solusi sinkronisasi dan Ikhtisar solusi migrasi.

Catatan

  • Pernyataan filter kompleks tidak didukung, seperti COLUMN1 IN (SELECT id FROM table1).

  • Jika tabel atau koleksi sumber berisi dua kolom yang namanya hanya berbeda dalam huruf besar/kecil, filter mungkin tidak menghasilkan hasil yang diharapkan.

  • Jika tipe database sumber adalah Tair/Redis, Anda hanya dapat memfilter data berdasarkan awalan kunci.

  • Jika tipe database sumber adalah MongoDB, pemfilteran kondisional hanya didukung untuk task sinkronisasi atau migrasi penuh. Fitur ini tidak didukung selama sinkronisasi atau migrasi inkremental.

  • Jika tipe database sumber bukan Tair/Redis maupun MongoDB, gunakan tanda kutip tunggal (') jika kondisi filter Anda memerlukan tanda kutip.

  • Jangan tambahkan titik koma (;) di akhir kondisi filter. Melakukannya dapat menyebabkan task gagal.

  • Jika operasi UPDATE dilakukan pada database sumber dan memenuhi kondisi tertentu—nilai pre-image memenuhi kondisi filter tetapi nilai post-image tidak—DTS secara default mengubah pernyataan UPDATE menjadi pernyataan DELETE dan mengeksekusinya pada database tujuan.

    Penting

    Pada instans DTS dengan database sumber SQL Server, jika bidang yang difilter bukan bagian dari clustered index, logika filter tidak akan berlaku.

  • DTS menggunakan pre-image filtering. Jika nilai bidang filter yang dikonfigurasi berubah, DTS menerapkan filter berdasarkan nilai sebelum perubahan.

    Contoh: Misalkan Anda mengonfigurasi kondisi filter enabled = 1. DTS hanya menyinkronkan data yang memenuhi kondisi ini. Jika Anda mengubah bidang data enabled = 1 menjadi enabled = 0, sistem memperlakukannya sebagai penghapusan record dengan enabled = 1 diikuti dengan penyisipan record baru dengan enabled = 0. Karena penghapusan memenuhi kondisi filter, record tersebut dihapus. Penyisipan berikutnya tidak memenuhi kondisi, sehingga tidak disinkronkan. Untuk menyinkronkan data enabled = 0 dan enabled = 1, hapus kondisi filter ini dan restart sinkronisasi.

Prosedur

Catatan

Metode penetapan kondisi filter bergantung pada tipe database sumber. Terdapat tiga kasus: Tair/Redis, MongoDB, dan tipe database lainnya.

Tetapkan secara individual

  1. Pada fase Configure Objects, pindahkan objek task ke area Selected Objects.

    Catatan

    Jika tipe database sumber adalah MongoDB, pilih objek pada granularitas koleksi. Jika tipe database sumber adalah Tair/Redis, pilih objek pada granularitas Redis DB. Untuk semua tipe database sumber lainnya, pilih objek pada granularitas tabel.

  2. Klik kanan objek target.

  3. Pada kotak dialog yang muncul, masukkan kondisi filter.

    • Jika tipe database sumber adalah Tair/Redis: Pada kotak dialog Edit Schema, masukkan Prefixes of Keys to Be Synchronized (daftar putih) atau Prefixes of Keys to Be Filtered Out (blacklist).

    • Jika tipe database sumber adalah MongoDB: Pada kotak dialog Edit Table, masukkan Filter Conditions.

    • Jika tipe database sumber adalah lainnya: Pada kotak dialog Edit Table, masukkan Filter Conditions.

    Catatan

    Untuk contoh sintaks, lihat Pernyataan contoh.

  4. Setelah menetapkan kondisi, klik OK.

  5. Selesaikan konfigurasi task yang tersisa sesuai petunjuk.

Tetapkan secara batch

  1. Pada fase Configure Objects, pindahkan objek task ke area Selected Objects.

  2. Di pojok kanan atas area Selected Objects, klik Batch Edit.

  3. Pada kotak Select Objects, centang objek yang ingin Anda tetapkan kondisi filter awalannya.

    Catatan

    Pertahankan nilai default untuk Select Type.

  4. Pada area Select Editing Type, klik tab Filter Conditions.

    Catatan

    Jika tipe database sumber adalah Tair/Redis, klik tab Prefixes of Keys to Be Synchronized/Filtered Out.

  5. Pilih Select Edit Mode.

    • Add: Pertahankan kondisi filter yang ada dan tambahkan yang baru.

    • Overwrite: Hapus kondisi filter yang ada dan terapkan yang baru.

  6. Tetapkan kondisi filter.

    • Jika tipe database sumber adalah Tair/Redis: Centang Prefixes of Keys to Be Synchronized atau Prefixes of Keys to Be Filtered Out sesuai kebutuhan, lalu masukkan awalan yang sesuai.

    • Jenis database sumber adalah MongoDB: Masukkan kondisi filter di kotak teks.

    • Jika tipe database sumber adalah lainnya: Masukkan kondisi filter di kotak teks.

    Catatan

    Untuk contoh sintaks, lihat Pernyataan contoh.

  7. Setelah menetapkan kondisi, klik OK.

  8. Selesaikan konfigurasi task yang tersisa sesuai petunjuk.

Pernyataan contoh

Tipe database sumber adalah Tair/Redis

Tipe filter

Pernyataan contoh

Deskripsi

Sync single prefix

Masukkan di Prefixes of Keys to Be Synchronized: dtsnew

Hanya sinkronkan data yang kuncinya pada objek terpilih diawali dengan dtsnew ke tujuan.

Filter single prefix

Masukkan di Prefixes of Keys to Be Filtered Out: dtstest

Filter data yang kuncinya pada objek terpilih diawali dengan dtstest. Sinkronkan semua data lainnya ke tujuan.

Sync multiple prefixes

Masukkan di Prefixes of Keys to Be Synchronized: dtsnew,dtsold

Hanya sinkronkan data yang kuncinya pada objek terpilih diawali dengan dtsnew atau dtsold ke tujuan.

Mixed sync and filter

Masukkan di Prefixes of Keys to Be Synchronized: dts

Masukkan di Prefixes of Keys to Be Filtered Out: dtstest

Hanya sinkronkan data yang kuncinya pada objek terpilih diawali dengan dts tetapi tidak diawali dengan dtstest ke tujuan.

Tipe database sumber adalah MongoDB

Tipe filter

Pernyataan contoh

Deskripsi

Other

{"_id":{$gt:"user100844658590795****",$lte:"user101674868045948****"}}

Filter berdasarkan ID pengguna. Di sini, $gt berarti lebih besar dari, dan $lte berarti kurang dari atau sama dengan. Kondisi filter MongoDB menggunakan sintaks yang berbeda dari klausa WHERE SQL standar. Untuk informasi selengkapnya, lihat Mapping SQL to MongoDB statements.

Database sumber bertipe lainnya

Catatan
  • Filter Conditions mendukung operator-operator berikut: karakter Inggris =, !=, <, >, dan in.

  • Jika Anda memiliki pertanyaan tentang penulisan kondisi filter, tinjau FAQ terlebih dahulu.

Pernyataan contoh

Tipe filter

Pernyataan contoh

Deskripsi

Value

id > 100 and id <= 200 or id in (1, 2, 3)

Hanya sinkronkan atau migrasikan data di mana bidang id lebih besar dari 100 dan kurang dari atau sama dengan 200, atau di mana bidang id bernilai 1, 2, atau 3.

String

address in('hangzhou','shanghai')

Hanya sinkronkan atau migrasikan data di mana bidang address bernilai hangzhou atau shanghai.

Time

create_time>'2020-01-01' atau create_time>'2020-01-01 00:00:00'

Hanya sinkronkan atau migrasikan data yang dibuat setelah tahun 2020.

Penting
  • Jangan gunakan create_time>'2020'.

  • Saat memfilter data berbasis waktu, DTS menggunakan zona waktu GMT+8. Jika data waktu Anda mencakup informasi zona waktu, konversikan waktu dalam kondisi filter Anda ke GMT+8 sebelum memasukkannya di Filter Conditions.

Tipe data yang didukung

Database

Tipe data yang didukung

PostgreSQL

CHAR, BIGINT, SMALLINT, INTEGER, FLOAT4, FLOAT8, VARCHAR, DATE, TIMESTAMP, NUMERIC

Oracle

VARCHAR2, NVARCHAR2, NUMBER, DATE, ROWID, CHAR, BINARY_FLOAT, BINARY_DOUBLE, CLOB, NCLOB, TIMESTAMP, TIMESTAMP WITH TIME ZONE, UROWID

MySQL

DECIMAL, INTEGER, BIGINT, FLOAT4, DOUBLE, DATE, TIME, DATETIME, YEAR, VARCHAR

SQL Server

NCHAR, DATE, TIME, DATETIME2, TINYINT, SMALLINT, INT, SMALLDATETIME, REAL, DECIMAL, DATETIME, FLOAT, BIT, NUMERIC, BIGINT, VARCHAR, CHAR, TIMESTAMP, NVARCHAR, MONEY, SMALLMONEY, UNIQUEIDENTIFIER

DB2 LUW

SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, FLOAT, DOUBLE, DECFLOAT, CHAR, CHARACTER, VARCHAR, GRAPHIC, NCHAR, VARGRAPHIC, NVARCHAR, DATE, TIME, TIMESTAMP, BLOB, CLOB, DBCLOB, LONG VARG, LONG VARCHAR, LONG VARGRAPHIC, BINARY, VARBINARY, XML

DB2 AS400

BIGINT, INTEGER, SMALLINT, DECIMAL, NUMERIC, FLOAT, DECFLOAT, CHAR, VARCHAR, NCHAR, BINARY, DATE, TIME, TIMESTAMP, XML

Langkah selanjutnya

  • Lihat pernyataan filter

    • Jika task belum dikonfigurasi: Kembali ke fase Configure Objects and Advanced Settings. Perluas objek sinkronisasi atau migrasi di area Selected Objects, klik kanan objek target, lalu lihat Filter Conditions.

    • Jika task sudah dikonfigurasi dan sedang berjalan: Gunakan fitur Create Similar Task atau Modify Sync Objects untuk masuk ke fase Configure Objects and Advanced Settings. Perluas objek sinkronisasi atau migrasi di area Selected Objects, klik kanan objek target, lalu lihat Filter Conditions. Batalkan task setelah melihat—tidak perlu melanjutkan. Untuk informasi selengkapnya, lihat Create similar task dan Modify sync objects.

  • Ubah pernyataan filter

    • Jika task belum dikonfigurasi: Kembali ke fase Configure Objects and Advanced Settings. Perluas objek sinkronisasi atau migrasi di area Selected Objects, klik kanan objek target, lalu ubah Filter Conditions.

    • Tugas saat ini telah dikonfigurasi dan Berjalan:

      • Task migrasi: Task migrasi tidak mendukung pengubahan kondisi filter. Anda harus mengonfigurasi ulang task.

      • Task sinkronisasi: Gunakan fitur Modify Sync Objects untuk masuk ke fase Configure Objects and Advanced Settings. Perluas objek sinkronisasi di area Selected Objects, klik kanan objek target, ubah Filter Conditions, lalu selesaikan konfigurasi yang tersisa sesuai petunjuk. Untuk informasi selengkapnya, lihat Modify sync objects.

Error umum

Jika kondisi filter Anda salah, task mungkin gagal dengan salah satu error berikut. Gunakan pesan error dan panduan di Langkah selanjutnya untuk mengatasi masalah.

Catatan

Ekspresi reguler ((.*)?) dalam pesan error merepresentasikan variabel.

Kode error

Pesan error

Deskripsi

DTS-RETRY-ERR-0070

In process of processing data (.*)? failed (.*)? Syntax error in SQL statement

Format bidang filter untuk objek sinkronisasi tidak valid.

DTS-RETRY-ERR-0145

Unknown column (.*)? in

Bidang yang ditentukan dalam kondisi filter tidak ada di database sumber.

DTS-RETRY-ERR-0147

You have an error in your SQL syntax

Bidang yang ditentukan dalam kondisi filter tidak ada di database sumber.

DTS-RETRY-ERR-0188

null value in column (.*)? violates not-null constraint

Kolom dengan Kendala NOT NULL di tujuan difilter, atau nilai kolom yang sesuai tidak ada di sumber.

DTS-RETRY-ERR-0276

if (.*)? is specified it must not be empty

Nilai yang dipetakan ke kolom Elasticsearch _id kosong. Filter record dengan nilai kosong.

FAQ

  • Mengapa kondisi filter saya tidak berlaku?

    Pernyataan filter mungkin tidak valid, atau task tersebut merupakan task MongoDB inkremental—yang tidak mendukung kondisi filter.

  • Data apa yang dipengaruhi oleh kondisi filter yang diubah?

    • Jika task belum dikonfigurasi: Untuk sumber MongoDB, perubahan hanya berlaku selama fase sinkronisasi penuh. Untuk tipe sumber lainnya, berlaku selama fase penuh dan inkremental.

    • Jika task sudah dikonfigurasi dan sedang berjalan: Untuk sumber MongoDB, perubahan tidak berpengaruh—tidak didukung. Untuk tipe sumber lainnya, hanya memengaruhi data inkremental.

  • Apakah saya dapat menetapkan kondisi filter secara batch?

    Tidak. Anda harus menetapkan kondisi filter secara individual untuk setiap objek target.

  • Apakah saya dapat memfilter data yang cocok dan menyinkronkan atau memigrasikan sisanya?

    • Jika tipe database sumber adalah Tair/Redis: Ya. Masukkan Prefixes of Keys to Be Filtered Out untuk mengecualikan kunci yang cocok.

    • Jika database sumber bertipe lainnya: Tidak. Sebagai gantinya, definisikan kondisi filter kebalikannya. Misalnya, untuk mengecualikan record di mana bidang age bernilai 25, masukkan age > 25 or age < 25 di Filter Conditions.

  • Bagaimana cara memfilter beberapa kunci?

    Pisahkan dengan koma (,).

  • Apakah saya dapat memasukkan Prefixes of Keys to Be Synchronized dan Prefixes of Keys to Be Filtered Out sekaligus?

    Ya. Kedua aturan akan diterapkan.

  • Apakah saya dapat memanggil API dalam kondisi filter?

    Tidak.

API terkait

Operasi API

Deskripsi

ConfigureDtsJob

Mengonfigurasi task migrasi atau sinkronisasi DTS. Tetapkan parameter filter dalam Dblist untuk menentukan kondisi filter.