可以在一张已经定义分区规则的分区表上,创建临时分区,并为这些临时分区设定单独的数据分布策略。在原子覆盖写操作或调整分区分桶策略时候,您可以将临时分区作为临时可用的数据载体。您可以为临时分区设定的数据分布策略包括分区范围、分桶数、以及部分属性,例如副本数、存储介质
应用场景
在以下应用场景中,可以使用临时分区功能:
-
原子覆盖写操作
如果需要重写某一正式分区的数据,同时保证重写过程中可以查看数据,可以先创建一个对应的临时分区,将新的数据导入到临时分区后,通过替换操作,原子地替换原有正式分区,生成新正式分区。
-
调整分区数据的查询并发
如果需要修改某一正式分区的分桶数,可以先创建一个对应分区范围的临时分区,并指定新的分桶数,然后通过 INSERT INTO 命令将原有正式分区的数据导入到临时分区中,通过替换操作,原子地替换原有正式分区,生成新正式分区。
-
修改分区策略
如果希望修改正式分区的分区范围,例如合并多个小分区为一个大分区,或将一个大分区分割成多个小分区,可以先建立对应合并或分割后范围的临时分区,然后通过 INSERT INTO 命令将原有正式分区的数据导入到临时分区中,通过替换操作,原子地替换原有正式分区,生成新正式分区。
创建临时分区
语法
- 创建一个临时分区
ALTER TABLE <table_name>
ADD TEMPORARY PARTITION <temporary_partition_name> VALUES [("value1"), {MAXVALUE|("value2")})]
[(partition_desc)]
[DISTRIBUTED BY HASH(<bucket_key>)];
或者
ALTER TABLE <table_name>
ADD TEMPORARY PARTITION <temporary_partition_name> VALUES LESS THAN {MAXVALUE|(<"value">)}
[(partition_desc)]
[DISTRIBUTED BY HASH(<bucket_key>)];
- 批量创建临时分区
ALTER TABLE <table_name>
ADD TEMPORARY PARTITIONS START ("value1") END ("value2") EVERY {(INTERVAL <num> <time_unit>)|<num>}
[(partition_desc)]
[DISTRIBUTED BY HASH(<bucket_key>)];
示例
在 site_access 表中创建临时分区 tp1, 使用 VALUES [(…),(…)) 语法指定其临时分区范围为 [2020-01-01, 2020-02-01)
ALTER TABLE site_access
ADD TEMPORARY PARTITION tp1 VALUES [("2020-01-01"), ("2020-02-01"));
在 site_access 表中创建临时分区 tp2,使用 VALUES LESS THAN (…) 语法指定其临时分区的上界为 2020-03-01。StarRocks 会将前一个临时分区的上界作为该临时分区的下界,生成一个左闭右开的临时分区,其范围为 [2020-02-01, 2020-03-01)
ALTER TABLE site_access
ADD TEMPORARY PARTITION tp2 VALUES LESS THAN ("2020-03-01");
在 site_access 表中创建临时分区 tp3,使用 VALUES LESS THAN (…) 语法指定其临时分区的上界为 2020-04-01 并且指定临时分区的副本数为 1,分桶数为 5。
ALTER TABLE site_access
ADD TEMPORARY PARTITION tp3 VALUES LESS THAN ("2020-04-01")
("replication_num" = "1")
DISTRIBUTED BY HASH (site_id);
在 site_access 表中批量创建临时分区,使用 START (…) END (…) EVERY (…) 语法指定批量创建的临时分区范围为 [2020-04-01, 2021-01-01),分区粒度是一个月。
ALTER TABLE site_access
ADD TEMPORARY PARTITIONS START ("2020-04-01") END ("2021-01-01") EVERY (INTERVAL 1 MONTH);
注意事项
- 临时分区的分区列和原有正式分区相同,且不可修改。
- 临时分区的分区名称不能和正式分区以及其他临时分区重复。
- 一张表所有临时分区之间的分区范围不可重叠,但临时分区的范围和正式分区范围可以重叠。