表达式分区和动态分区的特点能不能结合使用呢

表达式分区:在建表时设置分区表达式。在数据导入时,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

CREATE TABLE t_recharge_detail1 (
id bigint,
user_id bigint,
recharge_money decimal(32,2),
city varchar(20) not null,
dt varchar(20) not null
)
DUPLICATE KEY(id)
PARTITION BY dt,city
DISTRIBUTED BY HASH(id);

比如这种,明细模型本质就是无主键有序的数据,DUPLICATE KEY有序的前提是只能按照字段顺序有序,比如只能按照ABC这样的字段排序,不能按照CBA字段排序。

想CBA的话,就是ORDER BY(C,B,A) ,但是ORDER BY之后,就不能分区了。ORDER BY必须跟分号结束了。分区分桶语句就不能用了