表达式分区:在建表时设置分区表达式。在数据导入时,StarRocks 会根据数据和分区表达式的定义规则自动创建分区,无需在建表时预先手动/批量创建大量分区,或者配置动态分区属性。
比如说分区表达式,指定时间字段按天分区/按月分区/按年来进行分区。来了一条新一天/新月份/新一年的数据。自动创建新分区。
动态分区:可用自动管理分区的生命周期(TTL),例如对表中新输入的数据进行分区和删除过期的分区。甚至对数据冷热分离。
使用表达式分区后,就无法设置一些动态分区属性,比如多久过期,冷热分离等等。可否考虑结合这两种方式的特点一起来使用呢?比如我想按天分区,只保留一年的数据,保留近30天的数据为热存储,其他的为冷存储。这样来滚动管理
CREATE TABLE user_access_logs2 (
event_date DATE NOT NULL COMMENT "事件日期",
event_time DATETIME NOT NULL COMMENT "事件精确时间",
event_type INT NOT NULL COMMENT "事件类型",
user_id INT COMMENT "用户 ID",
device_code INT COMMENT "设备代码",
channel INT COMMENT "渠道 ID")
DUPLICATE KEY(event_date)
PARTITION BY date_trunc('day', event_date)
DISTRIBUTED BY HASH(user_id)
PROPERTIES (
"replication_num" = "3", -- 三副本
"dynamic_partition.enable" = "true", -- 启用动态分区
"dynamic_partition.time_unit" = "DAY", -- 分区粒度:按照天粒度创建分区
"dynamic_partition.start" = "-365", -- 保留过去35个分区(自动删除更早的)
"dynamic_partition.end" = "7", -- 预先创建未来 7 天的分区
"dynamic_partition.prefix" = "p", -- 分区前缀名 (例如:p20251112)
"dynamic_partition.buckets" = "8" -- 动态创建分区时的默认分桶数
);
我试图用这个SQL建表失败了。提示 SQL 错误 [1064] [42000]: Expression partitioning does not support properties of dynamic partitioning