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;