全部产品
Search
文档中心

Hologres:ALTER DYNAMIC TABLE

更新时间:Nov 29, 2025

Anda dapat memodifikasi properti tabel dinamis. Topik ini menjelaskan cara menggunakan pernyataan ALTER DYNAMIC TABLE.

Modifikasi tugas pembaruan

Jeda tugas pembaruan

Setelah tugas dijeda, semua tugas refresh berikutnya untuk tabel tersebut akan berhenti berjalan.

-- auto_refresh_enable: Menentukan apakah pembaruan otomatis diaktifkan. false: Menjeda pembaruan otomatis.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = false);

Mulai ulang tugas pembaruan

Anda dapat melanjutkan kembali tugas refresh yang sebelumnya dijeda. Setelah dilanjutkan, tugas tersebut akan kembali berjalan sesuai pengaturan refresh asli dari tabel.

-- auto_refresh_enable: Menentukan apakah pembaruan otomatis diaktifkan. true: Mengaktifkan pembaruan otomatis.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = true);

Modify the freshness time for refreshes

Anda dapat mengubah waktu kesegaran dengan nilai minimum 1 menit. Perubahan berlaku segera.

Catatan

Hanya tabel dinamis yang dibuat menggunakan sintaks V3.1 yang mendukung parameter ini.

ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> SET (freshness='<num> {minutes | hours}');

Modify the computing resources and specifications for refreshes

Anda dapat memodifikasi sumber daya komputasi untuk refresh, baik menggunakan sumber daya instans lokal (local) maupun sumber daya Serverless (serverless). Jika memilih sumber daya Serverless, Anda juga dapat menyesuaikan spesifikasi komputasinya sesuai kebutuhan. Namun, spesifikasi yang tersedia terbatas pada kapasitas instans. Untuk informasi selengkapnya, lihat Serverless Computing Guide.

Catatan
  • Hanya Hologres V4.0.7 dan versi yang lebih baru yang mendukung penentuan eksplisit warehouse_name.

V4.0.7 and later

-- Memodifikasi sumber daya komputasi untuk refresh. Anda dapat memilih eksekusi lokal atau eksekusi serverless.
ALTER [DYNAMIC] TABLE [ IF EXISTS ] [<schema>.]<table_name> SET (['local' | 'serverless' | '<warehouse_name>'])

-- Memodifikasi spesifikasi komputasi untuk eksekusi serverless.
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema>.]<table_name> SET (auto_refresh_guc_hg_experimental_serverless_computing_required_cores='<num>')

V3.1

-- Memodifikasi sumber daya komputasi untuk refresh. Anda dapat memilih eksekusi lokal atau eksekusi serverless.
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (computing_resource ='[local|serverless]');

-- Memodifikasi spesifikasi komputasi untuk eksekusi serverless.
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (refresh_guc_hg_experimental_serverless_computing_required_cores='<num>');

V3.0

-- Memodifikasi sumber daya refresh untuk satu tabel.
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (<incremental/full>_guc_hg_computing_resource ='[local|serverless]');

-- Jika dalam mode serverless, Anda juga dapat memodifikasi spesifikasi komputasi serverless.
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (<incremental/full>_guc_hg_experimental_serverless_computing_required_cores='<num>');

Modifikasi mode pembaruan

Mulai dari V3.1, Anda memiliki lebih banyak opsi untuk memodifikasi mode refresh:

  • Mengubah mode refresh dari incremental refresh menjadi full refresh. Fitur ini didukung di V3.0 dan versi yang lebih baru.

  • Mengubah mode refresh dari auto-refresh menjadi full refresh. Fitur ini didukung di V3.1 dan versi yang lebih baru.

Penting
  • Setelah mode diubah menjadi full refresh, tugas incremental refresh asli akan berhenti. Anda harus mengonfigurasi ulang properti terkait tugas refresh sesuai kebutuhan.

  • Sistem secara otomatis membersihkan tabel status untuk incremental refresh guna mengurangi penggunaan penyimpanan.

  • Untuk tabel dinamis dengan partisi logis, perubahan hanya berlaku untuk partisi mendatang. Untuk tabel dinamis non-partisi, perubahan berlaku segera.

V3.1 syntax

ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (auto_refresh_mode = '<full/auto>');

Sintaks V3.0

ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (refresh_mode = 'full');

Modifikasi rentang waktu partisi aktif

Jika tabel dinamis memiliki partisi logis, Anda dapat memodifikasi rentang waktu partisi aktif untuk menyesuaikan cakupan auto-refresh.

Catatan
  • Fitur ini hanya didukung di V3.1 dan versi yang lebih baru.

  • Perubahan hanya berlaku untuk partisi mendatang. Partisi yang sudah ada tidak terpengaruh.

-- auto_refresh_partition_active_time: Rentang waktu untuk auto-refresh. Perubahan hanya berlaku untuk partisi mendatang.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_partition_active_time = '<num> {minutes | hours | days}');

Modifikasi definisi kueri dan tambahkan kolom

V3.1 syntax

Mulai dari Hologres V3.1.18, Anda dapat memodifikasi definisi kueri tabel dinamis dan menambahkan kolom ke tabel dinamis dengan menambahkan kolom dalam kueri.

ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
AS
<query>; -- Definisi kueri baru.
  • Catatan penggunaan:

    • Definisi kueri baru harus memenuhi persyaratan berikut:

      • Skema tabel yang dihasilkan oleh kueri baru harus kompatibel dengan skema tabel yang dihasilkan oleh kueri asli. Persyaratan ini mencakup hal-hal berikut:

        • Kedua tabel harus merupakan tabel partisi atau tabel non-partisi.

        • Primary key (PK) kedua tabel harus sama.

        • Kunci distribusi kedua tabel harus sama. Anda tidak dapat memodifikasi kunci distribusi.

        • Kunci partisi kedua tabel harus sama. Anda tidak dapat memodifikasi kunci partisi.

        • Kunci pengelompokan (clustering key), kunci segmen (segment key), mode penyimpanan (misalnya column store atau row-column hybrid store), dictionary encoding, dan indeks bitmap kedua tabel harus sama.

        • Nama bidang kedua tabel harus sama. Anda tidak dapat memodifikasi nama bidang.

        • Bidang dengan nama yang sama harus memiliki tipe data dan properti NULLABLE yang sama.

      • Anda hanya dapat menambahkan kolom dalam kueri. Anda tidak dapat menghapus kolom. Saat menambahkan kolom, data yang sudah ada tetap tidak berubah. Kolom baru diisi dengan nilai NULL secara default dan akan diperbarui setelah refresh berikutnya.

    • Setelah memodifikasi definisi kueri, perilaku pembaruan adalah sebagai berikut:

      • Tabel dinamis non-partisi: Pembaruan berikutnya, baik otomatis maupun manual, akan memicu Refresh Overwrite.

      • Tabel dinamis dengan partisi logis: Partisi aktif secara otomatis memicu Refresh Overwrite selama auto-refresh berikutnya. Partisi historis memerlukan refresh manual.

      Setelah memodifikasi definisi kueri, jika kueri berisi operator yang tidak didukung oleh pembaruan bertahap, perilaku pembaruan adalah sebagai berikut:

      Mode Pembaruan

      Definisi Kueri Baru Mendukung Pembaruan Bertahap

      Definisi Kueri Baru Tidak Mendukung Pembaruan Bertahap

      auto_refresh_mode = 'auto'

      refresh_mode yang ditentukan saat pembuatan tabel tetap dipertahankan.

      refresh_mode secara otomatis berubah menjadi full refresh.

      auto_refresh_mode = 'incremental'

      Incremental refresh tetap dipertahankan.

      Pembaruan gagal. Anda harus secara manual mengubah mode menjadi pembaruan penuh.

      auto_refresh_mode = 'full'

      Full refresh tetap dipertahankan.

      Full refresh tetap dipertahankan.

  • Contoh

    1. Siapkan data sampel.

      -- Siapkan tabel sumber.
      CREATE TABLE employees (
          department_id INT,
          employee_name VARCHAR
      );
      -- Masukkan data.
      INSERT INTO employees (department_id, employee_name) VALUES
      (1, 'John'),
      (1, 'Jane'),
      (1, 'John'),  -- Nilai duplikat
      (2, 'Alice'),
      (2, 'Bob'),
      (2, 'Alice'); -- Nilai duplikat
      
      -- Buat tabel dinamis.
      CREATE  DYNAMIC TABLE dt_employees
      WITH (
        -- Properti tabel dinamis
        freshness = '1 minutes', 
        auto_refresh_mode = 'auto',
        distribution_key = 'department_id'
      )
      AS 
      SELECT
          department_id
      FROM employees   
      GROUP BY department_id;
      
      -- Kueri data di tabel dinamis.
      SELECT * FROM dt_employees;
    2. Tambahkan kolom ke tabel dinamis.

      -- Tambahkan kolom.
      ALTER DYNAMIC TABLE dt_employees
      AS 
      SELECT
          department_id,
         STRING_AGG(DISTINCT employee_name, ', ') AS unique_employees
      FROM employees   
      GROUP BY department_id;
      

      Setelah pernyataan berhasil dieksekusi, Anda dapat mengkueri data di tabel dinamis. Data di kolom baru bernilai NULL.

      department_id	|unique_employees
      -----------|--------
      1	|\N
      2	|\N

      Setelah refresh berikutnya berhasil, data di kolom baru diperbarui.

      department_id	|unique_employees
      -------------|---------
      1	|Jane, John
      2 |	Bob, Alice

Sintaks V3.0

Hologres V3.0 mendukung modifikasi definisi kueri. Sintaksnya adalah sebagai berikut. Saat ini, hanya modifikasi dalam mode full refresh yang didukung. Modifikasi dalam mode incremental refresh tidak didukung.

Catatan
  • Memodifikasi definisi kueri hanya mengubah definisi kueri tabel. Hal ini tidak mengubah nama bidang atau properti bidang asli.

  • Berhati-hatilah saat memodifikasi definisi kueri. Jika bidang dalam kueri baru tidak konsisten dengan bidang asli, masalah seperti error refresh atau inkonsistensi data dapat terjadi.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (task_definition = $$<new_query>$$); 
Catatan

Saat Anda menggunakan pernyataan ALTER DYNAMIC TABLE untuk memperbarui tabel dinamis, jika string diapit tanda kutip tunggal (''), Data Definition Language (DDL) tabel dinamis yang diambil menggunakan fungsi HG_DUMP_SCRIPT tidak konsisten dengan DDL yang ditampilkan di HoloWeb. Hal ini terjadi karena PostgreSQL mengenali string input sebagai identifier dan memotongnya menjadi 128 karakter menggunakan TRUNCATE. Oleh karena itu, Anda harus mengganti tanda kutip tunggal ('') dengan $$ XXX $$.

Modifikasi waktu mulai pembaruan

Anda dapat memodifikasi waktu mulai refresh, namun hanya ke waktu tertentu di masa depan. Hanya tabel dinamis yang dibuat di V3.0 yang mendukung sintaks ini.

-- Memodifikasi waktu mulai untuk full auto-refresh.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (<incremental/full>_auto_refresh_schd_start_time = '<timestamptz>');

Modifikasi interval pembaruan

Anda dapat memodifikasi interval refresh tabel dinamis. Tugas refresh kemudian akan berjalan sesuai interval baru. Hanya tabel dinamis yang dibuat di V3.0 yang mendukung sintaks ini.

-- Memodifikasi interval refresh full_auto_refresh_interval. Misalnya, '3 minutes' menentukan interval tiga menit.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (<incremental/full>_auto_refresh_interval = '[<num> { minutes | hours}]');

Modifikasi properti tabel dinamis

Anda dapat memodifikasi properti berikut dari tabel dinamis. Properti yang tidak disebutkan tidak didukung. Untuk informasi selengkapnya, lihat ALTER TABLE.

Catatan

Hologres V3.1.20 dan versi yang lebih baru mendukung ALTER DYNAMIC TABLE RENAME dan ALTER DYNAMIC TABLE SET SCHEMA. Versi sebelum Hologres V3.1.20 mendukung ALTER TABLE RENAME dan ALTER TABLE SET SCHEMA.

-- Mengganti nama tabel. Hologres V3.1.20 dan versi yang lebih baru mendukung ALTER DYNAMIC TABLE RENAME.
ALTER DYNAMIC TABLE [IF EXISTS] <table_name> RENAME TO <new_name>;

-- Memodifikasi dictionary.
ALTER DYNAMIC TABLE [<schema_name>].<table_name> SET (dictionary_encoding_columns = '[columnName{:[on|off|auto]}[,...]]'); 

-- Memodifikasi bitmap.
ALTER DYNAMIC TABLE [<schema_name>].<table_name> SET (bitmap_columns = '[columnName{:[on|off]}[,...]]');

-- Memodifikasi TTL.
ALTER DYNAMIC TABLE [<schema_name>].<table_name> SET (time_to_live_in_seconds = 'num');

-- Memodifikasi skema.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET SCHEMA <new_schema>;