临时分区
本文介绍如何使用临时分区功能。
您可以在一张已经定义分区规则的分区表上,创建临时分区,并为这些临时分区设定单独的数据分布策略。在原子覆盖写操作或调整分区分桶策略时候,您可以将临时分区作为临时可用的数据载体。您可以为临时分区设定的数据分布策略包括分区范 围、分桶数、以及部分属性,例如副本数、存储介质。
在以下应用场景中,您可以使用临时分区功能:
-
原子覆盖写操作
如果您需要重写某一正式分区的数据,同时保证重写过程中可以查看数据,您可以先创建一个对应的临时分区,将新的数据导入到临时分区后,通过替换操作,原子地替换原有正式分区,生成新正式分区。对于非分区表的原子覆盖写操作,请参考 ALTER TABLE - SWAP。
-
调整分区数据的查询并发
如果您需要修改某一正式分区的分桶数,您可以先创建一个对应分区范围的临时分区,并指定新的分桶数,然后通过
INSERT INTO
命令将原有正式分区的数据导入到临时分区中,通过替换操作,原子地替换原有正式分区,生成新正式分区。 -
修改分区策略
如果您希望修改正式分区的分区范围,例如合并多个小分区为一个大分区,或将一个大分区分割成多个小分区,您可以先建立对应合并或分割后范围的临时分区,然后通过
INSERT INTO
命令将原有正式分区的数据导入到临时分区中,通过替换操作,原子地替换原有正式分区,生成新正式分区。
创建临时分区
您可以通过 ALTER TABLE 命令创建一个临时分区,也可以批量创建临时分区。
语法
创建一个临时分区
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>)];
参数说明
partition_desc
:为临时分区指定分桶数和部分属性,包括副本数、存储介质等信息。
示例
在 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);
注意事项
- 临时分区的分区列和原有正式分区相同,且不可修改。
- 临时分区的分区名称不能和正式分区以及其他临时分区重复。
- 一张表所有临时分区之间的分区范围不可重叠,但临时分区的范围和正式分区范围可以重叠。