All Products
Search
Document Center

PolarDB:Aturan dan praktik terbaik perubahan DDL

Last Updated:Aug 28, 2026

Saat melakukan operasi DDL pada tabel sumber yang memiliki tampilan pencarian atau prosedur tersimpan ETL (sync_by_sql), berbagai jenis perubahan memengaruhi tautan sinkronisasi secara berbeda. Topik ini menjelaskan dampak setiap operasi DDL dan menyediakan praktik terbaik untuk membangun ulang saat diperlukan.

Dampak DDL pada tabel sumber

Untuk informasi mengenai operasi DDL, lihat Panduan Operasi DDL untuk PolarDB for MySQL. Tabel berikut menjelaskan bagaimana operasi DDL umum pada tabel sumber memengaruhi tautan sinkronisasi.

Jenis perubahan

Operasi

Status sinkronisasi

Deskripsi

Perubahan kolom

Drop a column

Normal

Data yang sudah ada tetap menyimpan nilai kolom yang di-drop. Pada data inkremental, nilai bidang tersebut adalah null.

Add a column

Normal

Kolom baru tidak ditambahkan secara otomatis ke tautan sinkronisasi. Untuk menambahkan kolom ke tautan, lihat Praktik perubahan AutoETL.

Modify a column type

Depends on the type

Tipe yang kompatibel (misalnya, INT ke TINYINT): data inkremental disinkronkan secara normal.

Tipe yang tidak kompatibel: tautan menjadi tidak tersedia. Anda harus membangun ulang tautan tersebut.

Rename a column

Disrupted

Tautan menggunakan nama kolom sejak waktu pembuatan. Setelah penggantian nama, tautan tidak dapat mengenali kolom tabel sumber yang telah diganti namanya. Anda harus membangun ulang tautan tersebut.

Other (reorder columns, modify default values, modify comments, extend VARCHAR length, modify character sets, modify auto-increment properties, modify NULL constraints, etc.)

Normal

Operasi-operasi ini tidak memengaruhi sinkronisasi.

Perubahan indeks

Add, drop, or modify a secondary index

Normal

Perubahan indeks secondary tidak memengaruhi sinkronisasi.

Drop or modify the primary key index

Disrupted

Tautan bergantung pada kunci primer tabel sumber untuk sinkronisasi data. Setelah Anda mengubah kunci primer, Anda harus membangun ulang tautan tersebut.

Perubahan tabel

TRUNCATE TABLE

Disrupted

Tautan tidak dapat mendeteksi operasi TRUNCATE. Untuk menghapus data tabel dan menyinkronkan perubahan ke PolarSearch, gunakan DELETE FROM sebagai gantinya.

RENAME TABLE

Disrupted

Tautan tidak mengenali nama tabel baru. Sinkronisasi data inkremental berhenti.

Other (OPTIMIZE TABLE, modify ROW_FORMAT, modify KEY_BLOCK_SIZE, update statistics, modify table character set, modify table comments, etc.)

Normal

Operasi-operasi ini tidak memengaruhi sinkronisasi.

Perubahan tabel partisi

Convert to a partitioned table, add a partition, merge partitions, repartition, analyze a partition, check a partition, optimize a partition, rebuild a partition, convert to a non-partitioned table, use local indexes, etc.

Normal

Operasi-operasi ini tidak memengaruhi sinkronisasi.

DROP PARTITION, DROP TABLESPACE, TRUNCATE PARTITION

Disrupted

Tautan tidak dapat mendeteksi operasi-operasi ini. Untuk menghapus data dan menyinkronkan perubahan ke PolarSearch, gunakan DELETE FROM sebagai gantinya.

EXCHANGE PARTITION, REPAIR PARTITION, IMPORT TABLESPACE

Disrupted

Tautan tidak dapat mendeteksi penggantian atau perbaikan data langsung pada partisi tertentu. Partisi lain tidak terpengaruh. Kami menyarankan Anda membangun ulang tautan setelah operasi ini.

Praktik perubahan AutoETL

Jika Anda perlu mengubah struktur sinkronisasi tampilan pencarian atau prosedur tersimpan ETL (misalnya, menambahkan bidang sinkronisasi), pertama-tama tentukan apakah perubahan tersebut dapat dilakukan secara langsung:

  • Jika perubahan in-place didukung, perbarui langsung definisi SQL tampilan pencarian atau prosedur tersimpan ETL tersebut. Sinkronisasi dilanjutkan dari offset asli tanpa memerlukan resinkronisasi penuh.

  • Jika perubahan in-place tidak didukung, bangun ulang dengan pendekatan "indeks baru + tautan baru". Setelah tampilan pencarian atau prosedur tersimpan ETL baru menyelesaikan sinkronisasi dan verifikasi data, alihkan traffic kueri aplikasi Anda ke indeks baru tersebut.

Apakah perubahan in-place didukung

Tabel berikut mencantumkan perubahan umum pada tampilan pencarian atau prosedur tersimpan ETL dan apakah perubahan tersebut mendukung perubahan in-place.

Jenis perubahan

Skenario yang berlaku

Perubahan in-place didukung

Deskripsi

Modify runtime parameters

Single-table synchronization / Multi-table aggregation

Yes

Menyesuaikan parameter untuk sumber daya sinkronisasi dan konkurensi tidak mengubah semantik komputasi. Perubahan in-place didukung.

Modify WHERE filter conditions

Single-table synchronization / Multi-table aggregation

Yes

Memodifikasi kondisi filter tidak memperbarui data yang sudah disinkronkan ke node PolarSearch. Untuk membersihkan data yang sudah ada, bangun ulang tautan tersebut.

Add synchronization columns

Single-table synchronization

Yes

Kolom baru hanya berlaku untuk data inkremental. Data historis tidak diisi ulang. Untuk mengisi ulang semua data, bangun ulang tautan tersebut.

Remove synchronization columns

Single-table synchronization

Yes

Kolom yang dihapus pada node PolarSearch berhenti diperbarui.

Modify the primary key of PolarSearch node indexes

Single-table synchronization / Multi-table aggregation

No. Rebuild required.

Kunci primer juga merupakan ID dokumen di PolarSearch. Perubahan ini tidak kompatibel.

Add or remove JOIN source tables, or modify the JOIN type

Multi-table aggregation

No. Rebuild required.

Struktur sinkronisasi berubah. Diperlukan perhitungan ulang penuh.

Add or remove GROUP BY or aggregate functions

Multi-table aggregation

No. Rebuild required.

Struktur agregasi berubah. Hasil agregasi historis tidak dapat digunakan kembali.

Add or remove UNION / UNION ALL branches

Multi-table aggregation

No. Rebuild required.

Struktur sinkronisasi berubah. Diperlukan perhitungan ulang penuh.

Convert between single-table synchronization and multi-table aggregation

Single-table synchronization / Multi-table aggregation

No. Rebuild required.

Logika sinkronisasi berubah sepenuhnya.

Change the data type of primary key / JOIN key / grouping columns

Single-table synchronization / Multi-table aggregation

No. Rebuild required.

Setelah perubahan tipe kolom kunci, status sinkronisasi asli tidak dapat digunakan kembali.

Perubahan in-place

Modifikasi logika SQL pada tautan yang ada dan mulai ulang tautan tersebut menggunakan status tautan yang sudah ada. Untuk informasi selengkapnya, lihat Tampilan Pencarian – Memodifikasi Tampilan Pencarian dan Prosedur Tersimpan ETL (sync_by_sql) – Memodifikasi Tautan Sinkronisasi.

  • Sintaks tampilan pencarian:

    ALTER SEARCH VIEW view_name UPDATE
      [WITH (option_list)]
      [TO (column_list, PRIMARY KEY (pk_column_list))]
      AS new_select_statement;
  • Sintaks prosedur tersimpan ETL:

    SET esl_link_options = "<new_option_list>";
    -- Jika new_sync_sql kosong, SQL sinkronisasi yang ada dipertahankan
    CALL dbms_etl.update_sync_link('<sync_id>', '<new_sync_sql>'); 

Perubahan dengan pendekatan "indeks baru + tautan baru"

Pendekatan "indeks baru + tautan baru" merupakan metode perubahan paling serbaguna. Tautan tersebut memindai ulang data dan menuliskannya ke node PolarSearch. Setelah tampilan pencarian atau prosedur tersimpan ETL baru menyelesaikan sinkronisasi dan verifikasi data, alihkan traffic kueri aplikasi Anda ke indeks baru tersebut.

Contoh:

Tambahkan bidang ke tabel shop.user dan bangun ulang tampilan pencarian. Asumsikan tampilan pencarian asli menyinkronkan tabel shop.user (dengan kolom id, name, phone, gmt_create) ke indeks user_v1. Anda perlu menambahkan kolom membership_level tanpa mengganggu kueri online.

  1. Buat indeks baru: Buat indeks baru bernama user_v2 pada node PolarSearch, dan sertakan bidang baru membership_level dalam pemetaannya.

    PUT user_v2
    {
      "mappings": {
        "properties": {
          "id":               { "type": "keyword" },
          "name":             { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
          "phone":            { "type": "keyword" },
          "gmt_create":       { "type": "date" },
          "membership_level": { "type": "integer" }
        }
      }
    }
  2. Modifikasi tabel sumber: Tambahkan kolom baru ke tabel user pada PolarDB for MySQL sumber.

    ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT 'Membership level';
  3. Buat tampilan pencarian baru: Buat tampilan pencarian baru untuk menyinkronkan data dari tabel shop.user ke indeks user_v2.

    CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user;
  4. Verifikasi dan alihkan: Jalankan SHOW SEARCH VIEW STATUS untuk memeriksa status tampilan pencarian baru. Setelah latensi sinkronisasi turun menjadi sekitar 0 hingga 1 detik, verifikasi data pada indeks baru tersebut. Setelah verifikasi, alihkan traffic kueri aplikasi Anda ke indeks user_v2 yang baru.

  5. Bersihkan sumber daya lama:: Setelah tampilan pencarian baru berjalan stabil, hapus tampilan pencarian lama dan indeks user_v1.

    DROP SEARCH VIEW user_v1;