动态分区:对表级别的数据进行生命周期管理,相当于对分区设置TTL。可对分区实现动态添加和动态删除,动态分区只支持Range分区。
原理:FE会在后台起一条线程,根据用户定义的规则进行分区的创建和删除。同时Doris支持对已有规则进行动态调整。
Doris目前只支持对单列分区的分区表设定动态分区规则。
动态分区前缀:dynamic_partition;
动态分区参数可参考:Doris官网
动态分区建表语句示例(创建一张以小时为单位的分区表):
-- 创建以小时为分区的动态分区表,注意HOUR的数据类型不能是DAET,应该是DATETIME
CREATE TABLE IF NOT EXISTS test.dynamic_test
(
`timestamp` DATETIME NOT NULL COMMENT "日志时间",
`type` INT NOT NULL COMMENT "日志类型",
`error_code` INT COMMENT "错误码",
`error_msg` VARCHAR(1024) COMMENT "错误详细信息",
`op_id` BIGINT COMMENT "负责人id",
`op_time` DATETIME COMMENT "处理时间"
)
ENGINE=OLAP -- 指定执行引擎
DUPLICATE KEY(`timestamp`, `type`) -- 明细表
PARTITION BY RANGE(`timestamp`)() -- 指定分区Key
DISTRIBUTED BY HASH (`timestamp`) BUCKETS 10
PROPERTIES(
"replication_num" = "2", -- 指定副本数
"dynamic_partition.enable" = "true", -- 开启动态分区特性
"dynamic_partition.time_unit" = "HOUR", -- 指定为HOUR分区(可根据需求创建月、周、日分区,但是HOUR 分区的数据类型不能是DATE,只能是DATETIME)
"dynamic_partition.end" = "1", -- 动态分区的结束偏移,为正数,提前创建对应范围的分区
"dynamic_partition.start" = "-5",-- 动态分区的起始偏移量,为负数,会删除对应范围的分区
"dynamic_partition.prefix" = "p", -- 指定分区前缀
"dynamic_partition.buckets" = "10" -- 指定分区中的分桶数
);
- 查看表分区:SHOW PARTITIONS FROM TABLE;
创建历史分区:
历史分区主要参数介绍,其他参数请参考 :Doris官网
-
create_history_partition 创建历史分区的开关,默认是false,改为true时就会自动创建历史分区,但是和start有关,如start未设置则无意义
-
history_partition_num 创建历史分区的数据量,默认为-1,不设置时,创建历史分区数量为 end - start,如参数大于 end - start ,则多余的分区不会创建
-
hot_partition_num 指定热分区,参数值标识往前N天和未来所有分区全部为热分区。对于热分区,系统会自动设置存储方式为SSD,并且设置storage_cooldown_time
-
创建历史分区的方式:可以在建表时直接指定,也可以通过ALTER 的方式设置
-
例如:ALTER TABLE student_dynamic_partition1 SET ("dynamic_partition.create_history_partition" = "true");
-
查看分区情况:SHOW PARTITIONS FROM TABLE;
-
手动分区和动态分区的转换:
手动和动态分区的转换,主要时通过dynamic_partition 的参数来调整的
动态转手动:"dynamic_partition.enable" = "false" 关闭动态分区开关即可
手动转动态:"dynamic_partition.enable" = "true" 打开动态分区开关即可,还需要添加 end、start等参数
具体内容看官网!!!