大数据分析——Apache Doris(四十三)

278 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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;