注意事項
本文要求PolarDB-X實例版本必須為5.4.14-16539836及以上;
若要對二級分區進行重命名操作,要求PolarDB-X實例版本必須為5.4.17-16952556及以上。
名詞解釋
表組:分區列完全相同的一組邏輯表或全局索引表的集合。
全局索引:使用另一個維度進行水平分區的數據與主表始終保持強一致的分區表。
語法
ALTER { TABLE tbl_name | TABLEGROUP tg_name | TABLEGROUP BY TABLE tbl_name }
rename_partition_specs_definition
| rename_subpartition_specs_definition
rename_partition_specs_definition:
RENAME PARTITION part_name to new_part_name[,part_name to new_part_name...]
rename_subpartition_specs_definition:
RENAME SUBPARTITION subpart_name to new_subpart_name[,subpart_name to new_subpart_name...]
其中ALTER TABLEGROUP BY TABLE tbl_name
是根據表名[db_name.]tbl_name自動查找目標表的表組tg_name進行表組級的分區重命名,語義上與給定具體表組名的SQL:ALTER TABLEGROUP tg_name
進行分區操作是一樣的。
場景1:目標分區是不含二級分區的一級分區
表級用法
假設表tb1的定義為:
CREATE TABLE tb1(a int) PARTITION BY key(a) partitions 3;
默認的這三個分區的名字依次是p1、p2、p3。
執行以下SQL,將p1、p3 重命名成p10、p30:
ALTER TABLE tb1 RENAME PARTITION p1 to p10, p3 to p30;
表組級用法
對表組的分區重命名,意味著表組內所有表的相應分區會同步的重命名。
假設表tb1、tb2的分區定義一致,且在一個表組mytg1(名字唯一即可,實例中全部以mytg1為例):
create tablegroup mytg1;
CREATE TABLE tb1(a int) PARTITION BY key(a) partitions 3 tablegroup=mytg1;
CREATE TABLE tb2(a int) PARTITION BY key(a) partitions 3 tablegroup=mytg1;
默認的這三個分區的名字依次是p1、p2、p3。
可以通過以下語法,將表組mytg1的p1、p3重命名成p10、p30:
alter tablegroup mytg1 RENAME PARTITION p1 to p10, p3 to p30;
場景2:目標分區是含有二級分區的一級分區
當二級分區為非模板分區時,重命名一級分區對二級分區沒有影響,語法規則與場景1一致。
當二級分區為模板分區時,重命名一級分區會讓該分區下的所有分區的名稱都發生變化。
表級用法
對于以下表tb1的定義為:
create table tb1 (
a bigint unsigned not null,
b bigint unsigned not null,
c bigint NOT NULL,
d varchar(16) NOT NULL,
e varchar(16) NOT NULL
)
partition by key (a,b) partitions 4
subpartition by range (c) (
subpartition sp1 values less than ( 1000 ),
subpartition sp2 values less than ( 2000 ),
subpartition sp3 values less than ( maxvalue )
);
默認4個一級分區的分區名稱分別是p1、p2、p3、p4, 這個表一共有12個二級分區,分別是:
p1sp1,p2sp1,p3sp1,p4sp1
p1sp2,p2sp2,p3sp2,p4sp2
p1sp3,p2sp3,p3sp3,p4sp3
重命名p1為p10:
alter table tb1 rename partition p1 to p10
以上命令會將所有p1分區下的所有二級分區名字都發生變更,{p1sp1, p1sp2, p1sp3} 變更為 {p10sp1, p10sp2, p10sp3} 。
表組級用法
對表組的分區重命名,意味著表組內所有表的相應分區會同步的重命名。
和表級類似,僅需將語法規則alter table #tb
改成alter tablegroup #tgname
或alter tablegroup by #tb
。
場景3:目標分區是模板化的二級分區
不可以只重命名具體的二級分區,只能重命名模板二級分區,意味著所有一級分區下的該模板二級分區都會同步重命名。
對于以下表tb1的定義為:
create table tb1 (
a bigint unsigned not null,
b bigint unsigned not null,
c bigint NOT NULL,
d varchar(16) NOT NULL,
e varchar(16) NOT NULL
)
partition by key (a,b) partitions 4
subpartition by range (c) (
subpartition sp1 values less than ( 1000 ),
subpartition sp2 values less than ( 2000 ),
subpartition sp3 values less than ( maxvalue )
);
默認地,4個一級分區的分區名稱分別是p1、p2、p3、p4, 這個表一共有12個二級分區,分別是:
p1sp1,p2sp1,p3sp1,p4sp1
p1sp2,p2sp2,p3sp2,p4sp2
p1sp3,p2sp3,p3sp3,p4sp3
可以重命名整個分區模板,例如:
alter table tb1 rename subpartition sp1 to sp10
以上命令會將所有一級分區下sp1模板分區都重命名,等同于同時將{p1sp1, p2sp1, p3sp1, p4sp1} 重命名為 {p1sp10, p2sp10, p3sp10, p4sp10}。
表組級用法
對表組的分區重命名,意味著表組內所有表的相應分區會同步的重命名。
和表級類似,僅需將語法規則alter table #tb
改成alter tablegroup #tgname
或alter tablegroup by #tb
。
場景4:目標分區是非模板化的二級分區
和場景3不一樣,當二級分區是非模板化分區時,重命名二級分區就是重命名具體的分區,語法同場景3:目標分區是模板化的二級分區,