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.
| Parameter | Deskripsi |
RENAME | Klausa 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:
|
DETACH PARTITION partition_name | Klausa 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.
Kategori Properti tabel Deskripsi Apakah tabel anak yang dibuat dengan mengeksekusi pernyataan CREATE TABLE PARTITION OF mewarisi pengaturan properti dari tabel induknya Aturan yang berlaku ketika tabel anak ditambahkan ke tabel induk Apakah tabel anak yang dilepaskan dari tabel induk mewarisi pengaturan properti dari tabel induk Properti tabel orientation Format penyimpanan tabel. Ya Harus konsisten dengan tabel induk Ya table_group Grup tabel tempat tabel tersebut termasuk. Properti ini juga menentukan jumlah shard untuk grup tabel. Ya Harus konsisten dengan tabel induk Ya time_to_live_in_seconds Periode time-to-live (TTL) tabel. Ya Tidak 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 Indeks primary key Kunci utama tabel. Ya Harus konsisten dengan tabel induk Ya distribution key Kunci distribusi tabel. Ya Harus konsisten dengan tabel induk Ya clustering_key Indeks terkluster tabel. Properti ini menentukan kolom dan urutan data disimpan dalam tabel. Ya Harus konsisten dengan tabel induk Ya event_time_column Kunci segmen tabel. Ya Harus konsisten dengan tabel induk Ya bitmap_columns Indeks bitmap tabel. Ya Harus mencakup kolom terindeks dari tabel induk Ya dictionary_encoding_columns Indeks bidang tabel. Ya Harus mencakup kolom terindeks dari tabel induk Ya binlog_level Menentukan apakah akan mengaktifkan binary logging. Ya Harus konsisten dengan tabel induk Ya proxima_vectors Indeks yang digunakan untuk melakukan pencarian vektor pada tabel. Ya Harus mencakup kolom terindeks dari tabel induk Ya Kendala kolom nullable Kendala NOT NULL. Ya Harus konsisten dengan tabel induk Ya nilai default Kendala nilai default. Ya Harus 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;