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.
PentingPada 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 dataenabled = 1menjadienabled = 0, sistem memperlakukannya sebagai penghapusan record denganenabled = 1diikuti dengan penyisipan record baru denganenabled = 0. Karena penghapusan memenuhi kondisi filter, record tersebut dihapus. Penyisipan berikutnya tidak memenuhi kondisi, sehingga tidak disinkronkan. Untuk menyinkronkan dataenabled = 0danenabled = 1, hapus kondisi filter ini dan restart sinkronisasi.
Prosedur
Metode penetapan kondisi filter bergantung pada tipe database sumber. Terdapat tiga kasus: Tair/Redis, MongoDB, dan tipe database lainnya.
Tetapkan secara individual
Pada fase Configure Objects, pindahkan objek task ke area Selected Objects.
CatatanJika 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.
Klik kanan objek target.
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.
CatatanUntuk contoh sintaks, lihat Pernyataan contoh.
Setelah menetapkan kondisi, klik OK.
Selesaikan konfigurasi task yang tersisa sesuai petunjuk.
Tetapkan secara batch
Pada fase Configure Objects, pindahkan objek task ke area Selected Objects.
Di pojok kanan atas area Selected Objects, klik Batch Edit.
Pada kotak Select Objects, centang objek yang ingin Anda tetapkan kondisi filter awalannya.
CatatanPertahankan nilai default untuk Select Type.
Pada area Select Editing Type, klik tab Filter Conditions.
CatatanJika tipe database sumber adalah Tair/Redis, klik tab Prefixes of Keys to Be Synchronized/Filtered Out.
Pilih Select Edit Mode.
Add: Pertahankan kondisi filter yang ada dan tambahkan yang baru.
Overwrite: Hapus kondisi filter yang ada dan terapkan yang baru.
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.
CatatanUntuk contoh sintaks, lihat Pernyataan contoh.
Setelah menetapkan kondisi, klik OK.
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: | Hanya sinkronkan data yang kuncinya pada objek terpilih diawali dengan |
Filter single prefix | Masukkan di Prefixes of Keys to Be Filtered Out: | Filter data yang kuncinya pada objek terpilih diawali dengan |
Sync multiple prefixes | Masukkan di Prefixes of Keys to Be Synchronized: | Hanya sinkronkan data yang kuncinya pada objek terpilih diawali dengan |
Mixed sync and filter | Masukkan di Prefixes of Keys to Be Synchronized: Masukkan di Prefixes of Keys to Be Filtered Out: | Hanya sinkronkan data yang kuncinya pada objek terpilih diawali dengan |
Tipe database sumber adalah MongoDB
Tipe filter | Pernyataan contoh | Deskripsi |
Other |
| Filter berdasarkan ID pengguna. Di sini, |
Database sumber bertipe lainnya
Filter Conditions mendukung operator-operator berikut: karakter Inggris
=,!=,<,>, danin.Jika Anda memiliki pertanyaan tentang penulisan kondisi filter, tinjau FAQ terlebih dahulu.
Pernyataan contoh
Tipe filter | Pernyataan contoh | Deskripsi |
Value |
| Hanya sinkronkan atau migrasikan data di mana bidang |
String |
| Hanya sinkronkan atau migrasikan data di mana bidang |
Time |
| Hanya sinkronkan atau migrasikan data yang dibuat setelah tahun 2020. Penting
|
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.
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 |
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
agebernilai 25, masukkanage > 25 or age < 25di 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 |
Mengonfigurasi task migrasi atau sinkronisasi DTS. Tetapkan parameter |