跳到主要内容
版本: 最新版本-3.5

动态分区(旧版)

StarRocks 支持动态分区,可以自动管理分区数据的生命周期 (TTL),例如对表中的新输入数据进行分区以及删除过期的分区。此功能显著降低了维护成本。

注意

请注意,从 v3.4 开始,表达式分区 进行了进一步优化,可以统一所有分区策略,并支持更复杂的解决方案。在大多数情况下,建议使用表达式分区,它将在未来的版本中取代动态分区策略。

启用动态分区

以表 site_access 为例。要启用动态分区,您需要配置 PROPERTIES 参数。有关配置项的信息,请参阅 CREATE TABLE

CREATE TABLE site_access(
event_day DATE,
site_id INT DEFAULT '10',
city_code VARCHAR(100),
user_name VARCHAR(32) DEFAULT '',
pv BIGINT DEFAULT '0'
)
DUPLICATE KEY(event_day, site_id, city_code, user_name)
PARTITION BY RANGE(event_day)(
PARTITION p20200321 VALUES LESS THAN ("2020-03-22"),
PARTITION p20200322 VALUES LESS THAN ("2020-03-23"),
PARTITION p20200323 VALUES LESS THAN ("2020-03-24"),
PARTITION p20200324 VALUES LESS THAN ("2020-03-25")
)
DISTRIBUTED BY HASH(event_day, site_id)
PROPERTIES(
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32",
"dynamic_partition.history_partition_num" = "0"
);

PROPERTIES:

参数是否必须描述
dynamic_partition.enable启用动态分区。有效值为 TRUEFALSE。默认值为 TRUE
dynamic_partition.time_unit动态创建分区的时间粒度。这是一个必需参数。有效值为 HOURDAYWEEKMONTHYEAR。时间粒度决定了动态创建分区的后缀格式。
  • 如果值为 HOUR,则分区列只能是 DATETIME 类型,不能是 DATE 类型。动态创建分区的后缀格式为 yyyyMMddHH,例如 2020032101
  • 如果值为 DAY,则动态创建分区的后缀格式为 yyyyMMdd。分区名称后缀示例为 20200321
  • 如果值为 WEEK,则动态创建分区的后缀格式为 yyyy_ww,例如 2020 年第 13 周的 2020_13
  • 如果值为 MONTH,则动态创建分区的后缀格式为 yyyyMM,例如 202003
  • 如果值为 YEAR,则动态创建分区的后缀格式为 yyyy,例如 2020
dynamic_partition.time_zone动态分区的时区,默认为系统时区。
dynamic_partition.start动态分区的起始偏移量。此参数的值必须是负整数。将根据当前日期、星期或月份(由参数 dynamic_partition.time_unit 的值决定)删除此偏移量之前的分区。默认值为 Integer.MIN_VALUE,即 -2147483648,这意味着不会删除历史分区。
dynamic_partition.end动态分区的结束偏移量。此参数的值必须是正整数。将提前创建从当前日期、星期或月份到结束偏移量的分区。
dynamic_partition.prefix添加到动态分区名称的前缀。默认值为 p
dynamic_partition.buckets每个动态分区的 bucket 数。默认值与由保留字 BUCKETS 确定的 bucket 数或由 StarRocks 自动设置的 bucket 数相同。
dynamic_partition.history_partition_num动态分区机制创建的历史分区的数量,默认值为 0。当该值大于 0 时,将提前创建历史分区。从 v2.5.2 开始,StarRocks 支持此参数。
dynamic_partition.start_day_of_weekdynamic_partition.time_unitWEEK 时,此参数用于指定每周的第一天。有效值:171 表示星期一,7 表示星期日。默认值为 1,表示每周从星期一开始。
dynamic_partition.start_day_of_monthdynamic_partition.time_unitMONTH 时,此参数用于指定每个月的第一天。有效值:1281 表示每个月的 1 号,28 表示每个月的 28 号。默认值为 1,表示每月从 1 号开始。第一天不能是 29 号、30 号或 31 号。
dynamic_partition.replication_num动态创建的分区中 tablet 的副本数。默认值与创建表时配置的副本数相同。

FE 配置

dynamic_partition_check_interval_seconds: 调度动态分区的时间间隔。默认值为 600 秒,这意味着每 10 分钟检查一次分区情况,以查看分区是否满足 PROPERTIES 中指定的动态分区条件。如果不是,将自动创建和删除分区。

查看分区

为表启用动态分区后,输入数据将持续自动分区。您可以使用以下语句查看当前分区。例如,如果当前日期是 2020-03-25,您将只能看到 2020-03-25 到 2020-03-28 范围内的分区。

SHOW PARTITIONS FROM site_access;

[types: [DATE]; keys: [2020-03-25];types: [DATE]; keys: [2020-03-26]; )
[types: [DATE]; keys: [2020-03-26];types: [DATE]; keys: [2020-03-27]; )
[types: [DATE]; keys: [2020-03-27];types: [DATE]; keys: [2020-03-28]; )
[types: [DATE]; keys: [2020-03-28];types: [DATE]; keys: [2020-03-29]; )

如果要在创建表时创建历史分区,则需要指定 dynamic_partition.history_partition_num 以定义要创建的历史分区的数量。例如,如果在创建表时将 dynamic_partition.history_partition_num 设置为 3,并且当前日期是 2020-03-25,您将只能看到 2020-03-22 到 2020-03-28 范围内的分区。

SHOW PARTITIONS FROM site_access;

[types: [DATE]; keys: [2020-03-22];types: [DATE]; keys: [2020-03-23]; )
[types: [DATE]; keys: [2020-03-23];types: [DATE]; keys: [2020-03-24]; )
[types: [DATE]; keys: [2020-03-24];types: [DATE]; keys: [2020-03-25]; )
[types: [DATE]; keys: [2020-03-25];types: [DATE]; keys: [2020-03-26]; )
[types: [DATE]; keys: [2020-03-26];types: [DATE]; keys: [2020-03-27]; )
[types: [DATE]; keys: [2020-03-27];types: [DATE]; keys: [2020-03-28]; )
[types: [DATE]; keys: [2020-03-28];types: [DATE]; keys: [2020-03-29]; )

修改动态分区的属性

您可以使用 ALTER TABLE 语句来修改动态分区的属性,例如禁用动态分区。以下语句作为一个示例。

ALTER TABLE site_access 
SET("dynamic_partition.enable"="false");

注意

  • 要检查表的动态分区的属性,请执行 SHOW CREATE TABLE 语句。
  • 您还可以使用 ALTER TABLE 语句来修改表的其他属性。