全部产品
Search
文档中心

Hologres:ALTER PARTITION TABLE

更新时间:Nov 19, 2025

Topik ini menjelaskan cara mengeksekusi pernyataan ALTER PARTITION TABLE untuk mengubah tabel terpartisi.

Sintaksis

Anda dapat mengeksekusi salah satu dari pernyataan berikut untuk mengubah tabel terpartisi di Hologres:
ALTER TABLE [IF EXISTS] table_name RENAME to new_table_name;
ALTER TABLE [IF EXISTS] table_name ATTACH PARTITION new_partition_name FOR VALUES in (<string_literal>);
ALTER TABLE [IF EXISTS] table_name DETACH PARTITION paritition_name;

Parameter

Tabel berikut menjelaskan parameter dalam pernyataan ALTER PARTITION TABLE yang digunakan untuk mengubah tabel terpartisi.
ParameterDeskripsi
RENAMEKlausa yang mengubah nama tabel terpartisi.
ATTACH PARTITION new_partition_name FOR VALUES in (<string_literal>)Klausa yang menambahkan tabel ke tabel terpartisi sebagai partisi. Perhatikan aturan berikut:
  • Anda harus menambahkan tabel berdasarkan kebijakan partisi dan kunci partisi dari tabel terpartisi.
  • Tabel yang akan ditambahkan harus memiliki jumlah kolom yang sama dengan tabel terpartisi. Tipe data dari kolom-kolom tersebut harus cocok.
  • Tabel yang akan ditambahkan harus memiliki semua kendala NOT NULL dari tabel terpartisi.

    Jika Anda menambahkan partisi daftar yang tidak menerima nilai NULL, tambahkan kendala NOT NULL ke kunci partisi, kecuali jika kunci utama adalah ekspresi.

DETACH PARTITION partition_nameKlausa yang melepaskan partisi tertentu dari tabel terpartisi.

Partisi yang dilepaskan masih ada sebagai tabel mandiri, tetapi tidak lagi memiliki hubungan dengan tabel tempat ia dilepaskan.

Batasan

  • Daftar dan tabel berikut menjelaskan aturan tentang pengaturan properti yang berlaku ketika tabel anak ditambahkan ke tabel induk.
    • Harus konsisten dengan tabel induk: Properti tabel anak harus konsisten dengan tabel induk. Jika tidak, kesalahan akan dilaporkan ketika tabel anak ditambahkan ke tabel induk, dan tabel anak lainnya harus dibuat.
    • Tidak harus konsisten dengan tabel induk: Properti tabel anak bisa berbeda dari tabel induk. Jika properti tabel anak tidak ditentukan secara eksplisit, tabel anak akan mewarisi pengaturan properti yang sesuai dari tabel induk. Jika properti tabel anak ditentukan secara eksplisit, pengaturan properti tabel anak dipertahankan.
    • Harus mencakup kolom terindeks dari tabel induk: Kolom terindeks dari tabel anak harus mencakup yang ada di tabel induk. Kolom yang tidak ditentukan sebagai kolom terindeks untuk tabel induk dapat ditentukan secara eksplisit untuk tabel anak.
    KategoriProperti tabelDeskripsiApakah tabel anak yang dibuat dengan mengeksekusi pernyataan CREATE TABLE PARTITION OF mewarisi pengaturan properti dari tabel induknyaAturan yang berlaku ketika tabel anak ditambahkan ke tabel indukApakah tabel anak yang dilepaskan dari tabel induk mewarisi pengaturan properti dari tabel induk
    Properti tabelorientationFormat penyimpanan tabel. YaHarus konsisten dengan tabel induk Ya
    table_groupGrup tabel tempat tabel tersebut termasuk. Properti ini juga menentukan jumlah shard untuk grup tabel. YaHarus konsisten dengan tabel induk Ya
    time_to_live_in_secondsPeriode time-to-live (TTL) tabel. YaTidak harus konsisten dengan tabel induk
    • Jika properti ini tidak ditentukan untuk tabel anak, tabel anak mewarisi pengaturan properti dari tabel induknya.
    • Jika properti ini ditentukan untuk tabel anak, pengaturan properti yang ditentukan dipertahankan.
    Ya
    Indeksprimary keyKunci utama tabel. YaHarus konsisten dengan tabel induk Ya
    distribution keyKunci distribusi tabel. YaHarus konsisten dengan tabel induk Ya
    clustering_keyIndeks terkluster tabel. Properti ini menentukan kolom dan urutan data disimpan dalam tabel. YaHarus konsisten dengan tabel induk Ya
    event_time_columnKunci segmen tabel. YaHarus konsisten dengan tabel induk Ya
    bitmap_columnsIndeks bitmap tabel. YaHarus mencakup kolom terindeks dari tabel induk Ya
    dictionary_encoding_columnsIndeks bidang tabel. YaHarus mencakup kolom terindeks dari tabel induk Ya
    binlog_levelMenentukan apakah akan mengaktifkan binary logging. YaHarus konsisten dengan tabel induk Ya
    proxima_vectorsIndeks yang digunakan untuk melakukan pencarian vektor pada tabel. YaHarus mencakup kolom terindeks dari tabel induk Ya
    Kendala kolomnullableKendala NOT NULL. YaHarus konsisten dengan tabel induk Ya
    nilai defaultKendala nilai default. YaHarus konsisten dengan tabel induk Ya
  • Tabel yang akan ditambahkan harus memiliki jumlah kolom yang sama dengan tabel terpartisi.
  • Tipe data dari kolom-kolom tersebut harus cocok.

Contoh

Kode sampel berikut memberikan contoh tentang cara mengeksekusi pernyataan ALTER PARTITION TABLE untuk mengubah tabel terpartisi:
-- Mengubah nama tabel terpartisi.
alter table holo_test rename to my_holo_test;

-- Menambahkan tabel bernama my_table sebagai partisi dari tabel bernama holo_table.
alter table holo_table attach partition my_table for values in ('2015');

-- Melepaskan tabel terpartisi anak holo_test dari tabel terpartisi induk all_test dan membuat tabel terpartisi anak menjadi tabel mandiri.
alter table all_test detach partition holo_test; 
            
Kode sampel berikut memberikan contoh tentang cara mengganti tabel terpartisi anak yang ada:
-- Membuat tabel sementara.
begin;
drop table if exists "table_20210101_new";
CREATE TABLE "table_20210101_new" (
  "colA" integer NOT NULL,
  "colB" text NOT NULL,
  "colC" numeric(38,10) NOT NULL,
  "ds" text NOT NULL,
  "process_time" timestamptz NOT NULL DEFAULT now()
);
call set_table_property('table_20210101_new', 'orientation','column');
call set_table_property('table_20210101_new', 'distribution_key','"colA"');
call set_table_property('table_20210101_new', 'event_time_column','process_time');
commit;

--- Mengimpor data ke tabel sementara.
insert into "table_20210101_new" select * from ...;

--- Mengganti tabel terpartisi anak yang ada dengan tabel sementara.
begin;
-- Melepaskan tabel terpartisi anak yang ada dari tabel terpartisi induk dan membuat tabel terpartisi anak menjadi tabel mandiri.
ALTER TABLE table_parent DETACH PARTITION table_20210101;
-- Mengubah nama tabel mandiri.
ALTER TABLE table_20210101 RENAME to table_20210101_backup;
-- Mengubah nama tabel sementara menjadi tabel terpartisi anak asli.
ALTER TABLE table_20210101_new RENAME to table_20210101;
-- Menambahkan tabel terpartisi anak baru ke tabel terpartisi induk.
ALTER TABLE table_parent ATTACH PARTITION table_20210101 FOR VALUES in ("20210101");
commit;