全部产品
Search
文档中心

Hologres:ALTER TABLE

更新时间:Feb 04, 2026

Pernyataan ALTER TABLE digunakan untuk memodifikasi tabel. Perubahan pada tabel induk dari tabel partisi secara otomatis diterapkan ke tabel anaknya. Topik ini menjelaskan cara menggunakan pernyataan ALTER TABLE.

Batasan

Hologres mendukung modifikasi tabel berikut:

  • Mengganti nama tabel, menambah kolom, dan memodifikasi masa hidup data (TTL) tabel.

  • Memodifikasi nilai default suatu bidang serta properti dictionary_encoding_columns dan bitmap_columns.

Catatan

Memodifikasi properti tabel seperti dictionary_encoding_columns, bitmap_columns, dan time_to_live_in_seconds dapat memicu proses kompaksi asinkron di latar belakang. Proses ini mengonsumsi sumber daya CPU, dan penggunaan penyimpanan instans mungkin meningkat sebelum akhirnya berkurang.

Modifikasi tipe data

Mulai dari Hologres V3.0, Anda dapat memodifikasi tipe data kolom pada tabel internal.

  • Batasan

    • Anda dapat memodifikasi tipe kolom pada tabel non-partisi dan tabel induk dari tabel partisi, tetapi tidak pada tabel anak.

    • Anda tidak dapat memodifikasi tipe data kolom kunci partisi pada tabel induk.

    • Klausa COLLATE dan USING tidak didukung.

    • Hanya konversi tipe data berikut yang didukung:

      Source data type

      Target type

      Catatan

      VARCHAR(N)

      VARCHAR(M)

      M harus lebih besar dari N.

      VARCHAR(N)

      TEXT

      Tidak ada

      CHAR(N)

      CHAR(M)

      M harus lebih besar dari N.

      CHAR(N)

      VARCHAR(M)

      M harus lebih besar dari atau sama dengan N.

      CHAR(N)

      TEXT

      Tidak ada

      JSON

      TEXT

      Tidak ada

      VARCHAR(N)[]

      VARCHAR(M)[]

      M harus lebih besar dari N.

      VARCHAR(N)[]

      TEXT[]

      Tidak ada

  • Sintaksis

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER [ COLUMN ] <column_name> TYPE <data_type>;
  • Contoh

    DROP TABLE IF EXISTS t;
    
    CREATE TABLE IF NOT EXISTS t (
        a varchar(5)
    );
    
    INSERT INTO t VALUES ('holo'), ('gres');
    
    ALTER TABLE IF EXISTS t ALTER COLUMN a TYPE text;

Ganti nama

Anda dapat menggunakan pernyataan ALTER TABLE untuk mengganti nama tabel. Sistem akan mengembalikan error jika tabel target tidak ada atau jika nama tabel baru sudah digunakan.

Catatan

Anda tidak dapat mengganti nama tabel lintas skema.

  • Sintaksis

    -- Rename an internal table
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> RENAME TO <new_table_name>;
    
    -- Rename a foreign table
    ALTER FOREIGN TABLE [IF EXISTS] [<schema_name>.]<foreign_table_name> RENAME TO <new_foreign_table_name>;
  • Contoh

    -- Ganti nama tabel holo_test menjadi holo_test_1
    ALTER TABLE IF EXISTS public.holo_test RENAME TO holo_test_1 ;
    
    -- Ganti nama tabel eksternal foreign_holo_test menjadi foreign_holo_test_1
    ALTER FOREIGN TABLE IF EXISTS public.foreign_holo_test RENAME TO foreign_holo_test_1;

Tambah kolom

Anda dapat menggunakan pernyataan ALTER TABLE untuk menambahkan kolom ke dalam tabel. Kolom baru hanya dapat ditambahkan setelah kolom terakhir yang sudah ada.

  • Sintaksis

    -- Tambah kolom
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ADD COLUMN <new_column> <data_type>;
    
    -- Tambah beberapa kolom
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ADD COLUMN <new_column_1> <data_type>, ADD COLUMN <new_column_2> <data_type>; 
  • Contoh

    -- Tambah kolom id ke tabel holo_test
    ALTER TABLE IF EXISTS public.holo_test ADD COLUMN id int;

Hapus kolom (Beta)

Mulai dari Hologres V2.0, Anda dapat menghapus kolom. Sintaksisnya sebagai berikut.

  • Batasan

    • Fitur ini hanya tersedia di Hologres V2.0 dan versi selanjutnya. Jika instans Anda lebih lama dari V2.0, lihat Common errors when preparing for an upgrade atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi lebih lanjut, lihat How do I get more online support?.

    • Jika Anda menggunakan tabel partisi, Anda hanya dapat menghapus kolom dari tabel induk, bukan langsung dari tabel anak. Saat kolom dihapus dari tabel induk, kolom tersebut secara otomatis dihapus dari semua tabel anaknya. Operasi ini memiliki overhead tinggi. Kami menyarankan Anda melakukan operasi ini pada jam sepi.

    • Hanya pemilik tabel yang dapat menghapus kolom. Jika database Anda menggunakan model izin sederhana, Anda harus memiliki izin dari kelompok pengguna developer.

    • Anda tidak dapat menghapus kolom yang ditetapkan sebagai Primary Key, Distribution Key, Clustering Key, atau Event_time_column.

    • Anda tidak dapat menghapus kolom dari tabel eksternal.

    • Saat Anda menghapus kolom terkait JSONB, indeks JSONB terkait juga akan dihapus.

    • Saat Anda menghapus kolom proxima_vector, Anda harus menentukan parameter cascade.

    • Saat Anda menghapus kolom Serial, jika sequence dibuat berdasarkan kolom ini, sequence tersebut juga akan dihapus.

    • Jika Tampilan yang di-materialisasi dibuat untuk suatu tabel, Anda tidak dapat menghapus tabel sumber atau kolom apa pun dalam tabel sumber yang dirujuk oleh Tampilan yang di-materialisasi tersebut.

  • Sintaksis

    Penting

    Anda tidak dapat menghapus kolom di versi Hologres sebelum V2.0.

    set hg_experimental_enable_drop_column = on; --Aktifkan fitur ini menggunakan parameter GUC ini.
    ALTER TABLE IF EXISTS <table_name> DROP COLUMN  [ IF EXISTS ] <column> [ RESTRICT | CASCADE ]
  • Contoh

    -- Buat tabel
    begin;
    CREATE TABLE tbl (
     "id" bigint NOT NULL,
     "name" text NOT NULL,
     "age" bigint,
     "class" text NOT NULL,
     "reg_timestamp" timestamptz NOT NULL,
    PRIMARY KEY (id,age)
    );
    call set_table_property('tbl', 'orientation', 'column');
    call set_table_property('tbl', 'distribution_key', 'id');
    call set_table_property('tbl', 'clustering_key', 'age');
    call set_table_property('tbl', 'event_time_column', 'reg_timestamp');
    call set_table_property('tbl', 'bitmap_columns', 'name,class');
    call set_table_property('tbl', 'dictionary_encoding_columns', 'class:auto');
    commit;
    
    -- Hapus kolom tertentu
    set hg_experimental_enable_drop_column = on;--Fitur ini masih dalam beta. Anda harus mengaktifkannya menggunakan parameter GUC ini.
    ALTER TABLE IF EXISTS tbl DROP COLUMN name;

    Kueri tabel:

    SELECT*FROMtbl;
    
    -- Hasil berikut dikembalikan:
    id    age    class    reg_timestamp
    ----+-----+---------+--------------
                        

Ganti nama kolom

Mulai dari Hologres V1.1, Anda dapat mengganti nama kolom. Sintaksisnya sebagai berikut.

Catatan
  • Jika instans Anda lebih lama dari V1.1, lihat Common errors when preparing for an upgrade atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi lebih lanjut, lihat How do I get more online support?.

  • Jika Anda menggunakan tabel partisi, Anda hanya dapat mengganti nama kolom pada tabel induk, bukan pada tabel anak tertentu. Struktur data tabel induk dan tabel anaknya harus konsisten. Saat Anda mengganti nama kolom pada tabel induk, perubahan tersebut secara otomatis diterapkan ke semua tabel anak.

  • Anda tidak dapat mengganti nama kolom di beberapa tabel sekaligus.

  • Hanya pemilik tabel yang dapat mengganti nama kolom. Jika database Anda menggunakan model izin sederhana, Anda harus memiliki izin dari kelompok pengguna developer.

  • Sintaksis

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> RENAME COLUMN <old_column_name> TO <new_column_name>;
  • Contoh

    -- Ganti nama kolom id pada tabel holo_test menjadi name
    ALTER TABLE IF EXISTS public.holo_test RENAME COLUMN id TO name; 

Modifikasi nilai default

Anda dapat menggunakan pernyataan ALTER TABLE untuk memodifikasi nilai default suatu kolom. Nilai default dapat berupa konstanta atau ekspresi konstanta. Nilai default baru hanya berlaku untuk data yang ditulis atau diperbarui setelah perubahan dilakukan dan tidak memengaruhi data yang sudah ada di tabel. Fitur ini hanya tersedia di Hologres V0.9.23 dan versi selanjutnya. Bagian berikut menjelaskan cara memodifikasi nilai default.

  • Sintaksis

    -- Modifikasi nilai default bidang tabel
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER COLUMN <column> SET DEFAULT <expression>;
    
    -- Hapus nilai default bidang tabel
    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER COLUMN <column> DROP DEFAULT;
  • Contoh

    -- Atur nilai default kolom id pada tabel holo_test menjadi 0
    ALTER TABLE IF EXISTS holo_test ALTER COLUMN id SET DEFAULT 0;
    
    -- Hapus nilai default kolom id pada tabel holo_test
    ALTER TABLE IF EXISTS holo_test ALTER COLUMN id DROP DEFAULT;

Modifikasi properti tabel

Di Hologres, Anda dapat mengeksekusi pernyataan untuk memodifikasi parameter dan mengubah properti tabel. Bagian berikut menjelaskan cara memodifikasi properti tabel.

  • Modifikasi properti dictionary_encoding_columns. Mengubah pengaturan encoding kamus akan menyebabkan file data di-encode ulang, yang mengonsumsi sumber daya CPU dan memori selama periode tertentu. Disarankan untuk melakukan perubahan ini pada jam sepi.

    • Sintaksis

      -- Modifikasi dictionary_encoding_columns (tersedia mulai V2.1)
      ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (dictionary_encoding_columns = '[columnName{:[on|off|auto]}[,...]]'); --Hanya modifikasi penuh yang didukung.
      
      -- Modifikasi dictionary_encoding_columns (semua versi)
      --Modifikasi penuh
      CALL SET_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
      
      --Modifikasi inkremental. Hanya bidang yang ditentukan dalam panggilan yang dimodifikasi. Bidang lain tetap tidak berubah.
      CALL UPDATE_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
      Penting

      Mulai dari Hologres V2.0, sintaksis UPDATE_TABLE_PROPERTY dioptimalkan. Saat Anda menjalankan pernyataan berikut, properti dictionary_encoding_columns tabel tetap tidak berubah. Di versi Hologres sebelum V2.0, properti dictionary_encoding_columns tabel dihapus.

      CALL UPDATE_TABLE_PROPERTY('<table_name>','dictionary_encoding_columns','');
    • Deskripsi parameter

      Parameter

      Deskripsi

      table_name

      Nama tabel bersifat case-sensitive dan dapat mencakup informasi skema.

      on

      Mengaktifkan dictionary_encoding_columns untuk bidang saat ini.

      off

      Menonaktifkan dictionary_encoding_columns untuk bidang saat ini.

      auto

      Otomatis. Jika Anda mengatur parameter ini ke auto, Hologres secara otomatis menentukan apakah akan mengaktifkan dictionary_encoding_columns berdasarkan tingkat pengulangan nilai dalam kolom tersebut. Tingkat pengulangan yang lebih tinggi memberikan manfaat lebih besar dari encoding kamus. Di Hologres V0.8 dan versi sebelumnya, dictionary_encoding_columns diaktifkan secara default untuk semua kolom teks. Di Hologres V0.9 dan versi selanjutnya, Hologres secara otomatis menentukan apakah akan membuat encoding kamus berdasarkan karakteristik data.

    • Contoh

      • Buat kamus secara eksplisit untuk kolom a, tentukan secara otomatis apakah akan membuat kamus untuk kolom b, dan jangan buat kamus untuk kolom c atau d.

        CREATE TABLE dwd.holo_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL UPDATE_TABLE_PROPERTY('dwd.holo_test','dictionary_encoding_columns','a:on,b:auto');
      • Nonaktifkan secara eksplisit kamus untuk kolom a. Sistem secara otomatis menambahkan indeks kamus ke kolom b, c, dan d.

        CREATE TABLE dwd.holo_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL SET_TABLE_PROPERTY('dwd.holo_test','dictionary_encoding_columns','a:off');
  • Modifikasi properti bitmap_columns

    Mulai dari Hologres V0.9, Anda dapat memodifikasi properti bitmap_columns dengan mengeksekusi pernyataan berikut tanpa perlu membuat ulang tabel.

    • Sintaksis

      -- Modifikasi bitmap_columns (tersedia mulai V2.1)
      ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (bitmap_columns = '[columnName{:[on|off]}[,...]]');
      
      -- Modifikasi bitmap_columns (semua versi)
      --Modifikasi penuh
      CALL SET_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
      
      --Modifikasi inkremental. Hanya bidang yang ditentukan dalam panggilan yang dimodifikasi. Bidang lain tetap tidak berubah.
      CALL UPDATE_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
      Penting

      Mulai dari Hologres V2.0, sintaksis UPDATE_TABLE_PROPERTY dioptimalkan. Saat Anda menjalankan pernyataan berikut, properti bitmap_columns tabel tetap tidak berubah. Di versi Hologres sebelum V2.0, properti bitmap_columns tabel dihapus.

      CALL UPDATE_TABLE_PROPERTY('<table_name>','bitmap_columns','');
    • Deskripsi parameter

      Parameter

      Deskripsi

      table_name

      Nama tabel bersifat case-sensitive dan dapat mencakup informasi skema.

      on

      Mengaktifkan bitmap_columns untuk bidang saat ini.

      off

      Menonaktifkan bitmap_columns untuk bidang saat ini.

    • Contoh

      • Aktifkan indeks bitmap untuk kolom a, dan nonaktifkan untuk kolom b, c, dan d.

        CREATE TABLE dwd.holo_test (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL UPDATE_TABLE_PROPERTY('dwd.holo_test','bitmap_columns','a:on');
      • Nonaktifkan indeks bitmap untuk kolom b. Sistem secara otomatis membuat indeks bitmap untuk kolom a, c, dan d.

        CREATE TABLE dwd.holo_test_1 (
         a text NOT NULL,
         b text NOT NULL,
         c text NOT NULL,
         d text
        );
        CALL SET_TABLE_PROPERTY('dwd.holo_test_1','bitmap_columns','b:off');
  • Modifikasi TTL data tabel

    • Sintaksis

      call set_table_property('[<schema_name>.]<table_name>', 'time_to_live_in_seconds', '<non_negative_literal>');
    • Deskripsi parameter

      Parameter

      Deskripsi

      time_to_live_in_seconds

      Disingkat sebagai TTL. Masa hidup data tabel, dalam satuan detik. Nilainya harus berupa bilangan bulat positif.

      Catatan

      TTL dimulai saat data ditulis ke Hologres. Setelah periode yang ditentukan berakhir, data tersebut dihapus. Penghapusan tidak presisi hingga detik.

    • Contoh

      call set_table_property('dwd.holo_test', 'time_to_live_in_seconds', '600');

Modifikasi skema tabel

Mulai dari Hologres V1.3, Anda dapat memodifikasi skema tabel. Misalnya, Anda dapat memindahkan tabel dari schema1 ke schema2 tanpa perlu membuat ulang tabel atau mengimpor data, sehingga memungkinkan perpindahan jalur tabel secara cepat.

  • Sintaksis

    ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name>
        SET SCHEMA <new_schema>;

    schema_name adalah nama skema tempat tabel berada, table_name adalah nama tabel yang akan dimodifikasi, dan new_schema adalah nama skema baru tempat tabel tersebut dipindahkan.

  • Contoh

    Pindahkan tabel bernama tb1 dari skema public ke skema testschema.

    ALTER TABLE IF EXISTS public.tbl
        SET SCHEMA testschema;

Modifikasi tabel menggunakan editor visual HoloWeb

HoloWeb menyediakan editor visual untuk tabel. Anda dapat memodifikasi bidang tabel dan beberapa properti tabel tanpa menulis perintah SQL. Langkah-langkahnya sebagai berikut.

  1. Buka halaman HoloWeb. Untuk informasi selengkapnya, lihat Connect to HoloWeb and run a query.

  2. Pada bilah menu atas halaman HoloWeb, klik Metadata Management.

  3. Pada daftar Logged-in Instances di sisi kiri halaman Metadata Management, klik ganda tabel target yang ingin Anda modifikasi.

  4. Pada halaman detail tabel, Anda dapat memodifikasi bidang tabel dan beberapa properti tabel secara visual.

    te111

  5. Di pojok kanan atas, klik Submit untuk menyelesaikan modifikasi.