持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
动态分区
动态分区是在 Doris 0.12 版本中引入的新功能。旨在对表级别的分区实现生命周期管理(TTL),减少用户的使用负担。
目前实现了动态添加分区及动态删除分区的功能。
原理
在某些使用场景下,用户会将表按照天进行分区划分,每天定时执行例行任务,这时需要使用方手动管理分区,否则可能由于使用方没有创建分区导致数据导入失败,这给使用方带来了额外的维护成本。
通过动态分区功能,用户可以在建表时设定动态分区的规则。FE 会启动一个后台线程,根据用户指定的规则创建或删除分区。用户也可以在运行时对现有规则进行变更。
使用方式
动态分区的规则可以在建表时指定,或者在运行时进行修改。当前仅支持对单分区列的分区表设定动态分区规则。
- 建表时指定:
| CREATE TABLE tbl1**(...)PROPERTIES(** "dynamic_partition.prop1" = "value1" , "dynamic_partition.prop2" = "value2" , ...****) |
|---|
- 运行时修改
| ALTER TABLE tbl1 SET**(** "dynamic_partition.prop1" = "value1" , "dynamic_partition.prop2" = "value2" , ...****) |
|---|
示例
l 表 tbl1 分区列 k1 类型为 DATE,创建一个动态分区规则。按天分区,只保留最近7天的分区,并且预先创建未来3天的分区。
| 操作步骤 | 说明 |
|---|---|
| 1 | 开启动态分区功能,可以在fe.conf中设置dynamic_partition.enable=true,也可以使用命令进行修改,使用命令修改,并dynamic_partition_check_interval_seconds调度时间设置为5秒,意思是每过5秒根据配置刷新分区,这里设置为5秒,真实场景可以设置为12小时 |
| curl --location-trusted -u root:123456 -XGET http://node1:8030/api/_set_config?dynamic_partition_enable=truecurl --location-trusted -u root:123456 -XGET http://node1:8030/api/_set_config?dynamic_partition_check_interval_seconds=5**ADMIN** SET FRONTEND CONFIG ("dynamic_partition_enable"="true") ;ADMIN SET FRONTEND CONFIG ("dynamic_partition_check_interval_seconds"="5") ; | |
| 2 | 创建一张调度单位为天,可以删除历史分区的动态分区表 |
| CREATE TABLE order_dynamic_partition1**(**id int **,**time date **,**money double **,**areaName varchar ( 50 **)****)**duplicate key ( id , time **)**PARTITION BY RANGE ( time )()DISTRIBUTED BY HASH ( id ) buckets 10PROPERTIES ("dynamic_partition.enable" = "true" ,"dynamic_partition.time_unit" = "DAY","dynamic_partition.start" = "-7", "dynamic_partition.end" = "3", "dynamic_partition.prefix" = "p" , "dynamic_partition.buckets" = "10" ,"replication_num" = "1"); | |
| 假设当前日期为 2021-02-15。则根据以上规则,tbl1 会产生以下分区: | |
| p20210215: ["2021-02-15", "2021-02-16")p20210216: ["2021-02-16", "2021-02-17")p20210217: ["2021-02-17", "2021-02-18")p20210218: ["2021-02-18", "2021-02-19") | |
| 在第二天,即 2021-02-16,会创建新的分区 p20200602: ["2021-02-19", "2021-02-20") | |
| 在 2021-02-23 时,因为 dynamic_partition.start 设置为 7,则将删除7天前的分区,即删除分区 p20210215。 | |
| 3 | 查看分区表情况SHOW DYNAMIC PARTITIONS TABLES,更新最后调度时间 |
| SHOW DYNAMIC PARTITION TABLES; | |
| 4 | 插入测试数据 |
| insert into order_dynamic_partition1 values ( 1 , '2021-02-15 11:00:00' , 200.0 , '北京' **);**insert into order_dynamic_partition1 values ( 1 , '2021-02-16 11:00:00' , 200.0 , '北京' **);**insert into order_dynamic_partition1 values ( 1 , '2021-02-17 11:00:00' , 200.0 , '北京' ); | |
| 5 | 使用命令查看表下的所有分区:show partitions from order_dynamic_partition1; |