ALTER PARTITION TABLE語句用於修改分區表。本文為您介紹ALTER PARTITION TABLE的用法。
命令格式
Hologres支援以下3種修改分區表的操作。
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;
參數說明
修改分區表命令的參數說明如下。
參數 | 描述 |
| 重新命名分區表。 |
| 用於將當前表綁定為目標表的分區。說明如下:
|
| 分離目標表的指定分區。 被分離的分區作為獨立表繼續存在,但不再與目標表相關聯。 |
使用限制
分區子表在綁定父表時,其約束關係如下表所示。其中:
與父表保持一致:即對應的屬性分區子表必須和父表保持一致,若不一致,在分區子表綁定(ATTACH)父表時會報錯,需要重新建立分區子表。
不要求與父表一致:即對應的屬性分區子表可以與父表不一致,如果子表沒有顯式指定屬性,則會繼承父表的屬性,若是子表顯式指定屬性,則會保留子表的屬性。
索引列必須包含父表的索引列:即分區子表的索引列必須包含父表的索引列,還能顯式再指定其他列。
分類
表屬性
描述
create table partition of 時是否繼承父表屬性
ATTACH時與父表的約束關係
DETACH時是否繼承父表屬性
表屬性
orientation
表格儲存體格式。
繼承
與父表保持一致。
繼承
table_group
Table Group屬性包含Shard Count。
繼承
與父表保持一致。
繼承
time_to_live_in_seconds
表資料生命週期。
繼承
不要求與父表一致。
子表屬性未賦值,繼承父表屬性。
子表屬性已賦值,保留子表屬性。
繼承
索引
primary key
主鍵。
繼承
與父表保持一致。
繼承
distribution key
分布鍵。
繼承
與父表保持一致。
繼承
clustering_key(包括列和排序)
聚簇索引。
繼承
與父表保持一致。
繼承
event_time_column
分段鍵。
繼承
與父表保持一致。
繼承
bitmap_columns
位元編碼。
繼承
索引列必須包含父表的索引列。
繼承
dictionary_encoding_columns
欄位編碼。
繼承
索引列必須包含父表的索引列。
繼承
binlog_level
是否開啟Binlog。
繼承
與父表保持一致。
繼承
proxima_vectors
向量檢索索引。
繼承
索引列必須包含父表的索引列。
繼承
列約束
nullable
非空約束。
繼承
與父表保持一致。
繼承
default value
預設值。
繼承
與父表保持一致。
繼承
Attach的表必須與目標表具有相同的列,而不能多或者少列。
Attach時列的類型必須匹配。
使用樣本
修改分區表的樣本語句如下。
--修改分區表的名稱
alter table holo_test rename to my_holo_test;
--添加my_table為holo_table的分區表
alter table holo_table attach partition my_table for values in ('2015');
--將holo_test從all_test分區表中解除綁定,分離為獨立表
alter table all_test detach partition holo_test;
您也可以參見如下完整樣本進行分區表替換。
-- 建立新的分區表
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;
---匯入資料
insert into "table_20210101_new" select * from ...;
---替換子表
begin;
--解除綁定子分區為獨立的表
ALTER TABLE table_parent DETACH PARTITION table_20210101;
--重新命名解除綁定定後獨立的表
ALTER TABLE table_20210101 RENAME to table_20210101_backup;
--把暫存資料表更名為分區表名
ALTER TABLE table_20210101_new RENAME to table_20210101;
--綁定新的分區表
ALTER TABLE table_parent ATTACH PARTITION table_20210101 FOR VALUES in ("20210101");
commit;