目录

  • 1. 背景
  • 2. 创建动态分区表
  • 3. 动态分区表的查看
  • 4. 动态分区表属性说明
    • 4.1 dynamic_partition_check_interval_seconds
  • 5. 动态分区表属性的修改
    • 5.1 动态分区表和手动分区表相互转换
  • 6. 动态分区注意事项

1. 背景

表按date或datetime类型字段进行分区,对于新的数据,需要我们手动添加分区,和删除旧的分区,维护工作量太大。所以Apache Doris启动了一个后台进程,默认每隔1小时(由fe.conf的dynamic_partition_check_interval_seconds参数设置)根据当前的日期时间来添加分区和删除分区

动态分区只支持Range分区

2. 创建动态分区表

表创建于2021-11-05 22:30:00,星期五

mysql>
mysql> create table dynamic_partition(-> user_id bigint,-> partition_datetime datetime,-> send_msg varchar(512)-> )-> unique key(user_id, partition_datetime)-> partition by range(partition_datetime) ()-> distributed by hash(user_id)-> properties-> (-> 'dynamic_partition.enable' = 'true',-> 'dynamic_partition.time_unit' = 'week',-> 'dynamic_partition.start' = '-1',-> 'dynamic_partition.end' = '2',-> 'dynamic_partition.prefix' = 'p_week',-> 'dynamic_partition.buckets' = '10'-> );
Query OK, 0 rows affected (0.10 sec)mysql>
  • 每周划分成一个分区,数据的插入根据partition_datetime字段来判断进入哪个partition
  • 到2021-11-08 星期一,又会添加一个分区[(‘2021-11-22 00:00:00’), (‘2021-11-29 00:00:00’))
  • 到2021-11-15 星期一,会添加一个分区[(‘2021-11-29 00:00:00’), (‘2021-12-06 00:00:00’)),也会删除分区p_week2021_45
  • 如果将dynamic_partition.end设置为15,在年交汇的时间会有如下分区现象:
mysql> show create table dynamic_partition;
......省略部分......
PARTITION p_week2021_53 VALUES [('2021-12-27 00:00:00'), ('2022-01-03 00:00:00')),
PARTITION p_week2022_02 VALUES [('2022-01-03 00:00:00'), ('2022-01-10 00:00:00')),
......省略部分......
1 row in set (0.00 sec)mysql>

建表语句执行完的分区结果如下:

PARTITION p_week2021_45 VALUES [('2021-11-01 00:00:00'), ('2021-11-08 00:00:00')),
PARTITION p_week2021_46 VALUES [('2021-11-08 00:00:00'), ('2021-11-15 00:00:00')),
PARTITION p_week2021_47 VALUES [('2021-11-15 00:00:00'), ('2021-11-22 00:00:00'))

3. 动态分区表的查看

查看分区的调度情况

mysql> show dynamic partition tables;
+-------------------+--------+----------+-------+------+--------+---------+----------------+-------------------------+---------+---------------------+---------------------+--------+------------------------+----------------------+------------------------+
| TableName         | Enable | TimeUnit | Start | End  | Prefix | Buckets | ReplicationNum | ReplicaAllocation       | StartOf | LastUpdateTime      | LastSchedulerTime   | State  | LastCreatePartitionMsg | LastDropPartitionMsg | ReservedHistoryPeriods |
+-------------------+--------+----------+-------+------+--------+---------+----------------+-------------------------+---------+---------------------+---------------------+--------+------------------------+----------------------+------------------------+
| dynamic_partition | true   | WEEK     | -1    | 2    | p_week | 10      | 3              | tag.location.default: 3 | MONDAY  | 2021-11-05 22:30:00 | 2021-11-05 22:30:00 | NORMAL | NULL                   | NULL                 | NULL                   |
+-------------------+--------+----------+-------+------+--------+---------+----------------+-------------------------+---------+---------------------+---------------------+--------+------------------------+----------------------+------------------------+
1 row in set (0.01 sec)mysql>

字段说明如下:

  • LastUpdateTime: 最后一次修改动态分区属性的时间
  • LastSchedulerTime: 最后一次执行动态分区调度的时间
  • State: 最后一次执行动态分区调度的状态
  • LastCreatePartitionMsg: 最后一次执行动态添加分区调度的错误信息
  • LastDropPartitionMsg: 最后一次执行动态删除分区调度的错误信息

查看表的分区

mysql> show partitions from dynamic_partition;

4. 动态分区表属性说明

  • 目前仅支持对一个date或datetime时间分区列进行动态分区。如果是date时间字段,分区粒度不能是小时hour
  • dynamic_partition.time_unit:分区时间单位可以是hour、day、week、month,各分区单位对应的分区后缀如下:
    • hour:yyyyMMddHH
    • day:yyyyMMdd
    • week:yyyy_ww,ww指这一年的第几周。针对于dynamic_partition.start_day_of_week:取值范围为1-7,默认为1,表示周一为每周的起始点
    • month:yyyyMM。dynamic_partition.start_day_of_month:取值范围为1-28,默认为1,表示1号为每月的起始点
  • dynamic_partition.start:以基准日期为准,删除指定分区单位之前的分区。默认不删除分区
  • dynamic_partition.end:以基准日期为准,创建指定分区单位内的分区。如将当前时间和dynamic_partition.end之间的分区删除,则在下次定时动态分区操作时将会创建缺失的分区
  • dynamic_partition.start_day_of_week:当time_unit为WEEK时,该参数用于指定每周的起始点。取值为1 ~ 7。其中1(默认)表示周一,7表示周日
  • dynamic_partition.start_day_of_month:当time_unit为MONTH时,该参数用于指定每月的起始日期。取值为1 ~ 28。其中1(默认)表示每月1号,28表示每月28号
  • dynamic_partition.replication_num:默认为建表时的副本数量

下面是历史分区的参数:

  • dynamic_partition.create_history_partition:默认为false,即创建表的时候不会创建历史分区,只会创建当前和未来的分区。当置为true时,Doris会自动创建所有分区,当期望创建的分区个数大于max_dynamic_partition_num(默认500)值时,操作将被禁止。当不指定start属性时,该参数不生效

  • dynamic_partition.history_partition_num:该参数用于指定创建历史分区数量。默认值为-1, 不进行设置,以start属性为准。如果设置了则以当前值为准,但必须小于等于start属性的绝对值

  • dynamic_partition.hot_partition_num:指定当前和最近的历史分区共多少个分区为热分区,但未来的分区都是热分区。对于热分区,系统会自动设置其storage_medium参数为SSD,并且设置storage_cooldown_time

  • dynamic_partition.reserved_history_periods:需要保留的历史分区的时间范围,不会被后台的定时任务删除。默认为"NULL"。当dynamic_partition.time_unit设置为"DAY/WEEK/MONTH"时,需要以[yyyy-MM-dd,yyyy-MM-dd],[…,…]格式进行设置,例如'dynamic_partition.reserved_history_periods' = '[2022-06-01,2022-06-15],[2022-07-01,2022-07-15]'。当dynamic_partition.time_unit设置为"HOUR"时,需要以[yyyy-MM-dd HH:mm:ss,yyyyMM-dd HH:mm:ss],[…,…]的格式来进行设置,例如'reserved_history_periods' = '[2022-07-01 00:00:00,2022-07-01 03:00:00]'

4.1 dynamic_partition_check_interval_seconds

定时检测分区是否符合创建或删除的条件,如果符合,则创建或删除。默认时间为1小时(3600秒)。修改方式有以下几种:

  1. 在fe.conf中进行修改,然后重启FE
  2. 通过mysql命令:admin set frontend config('dynamic_partition_check_interval_seconds' = '7200');

5. 动态分区表属性的修改

mysql>
mysql> alter table dynamic_partition set-> (-> 'dynamic_partition.time_unit' = 'month',-> 'dynamic_partition.start' = '-5',-> 'dynamic_partition.prefix' = 'p_month'-> );
Query OK, 0 rows affected (0.06 sec)mysql>

修改后的表分区情况如下:

PARTITION p_week2021_45 VALUES [('2021-11-01 00:00:00'), ('2021-11-08 00:00:00')),
PARTITION p_week2021_46 VALUES [('2021-11-08 00:00:00'), ('2021-11-15 00:00:00')),
PARTITION p_week2021_47 VALUES [('2021-11-15 00:00:00'), ('2021-11-22 00:00:00')),
PARTITION p_month202112 VALUES [('2021-12-01 00:00:00'), ('2022-01-01 00:00:00')),
PARTITION p_month202201 VALUES [('2022-01-01 00:00:00'), ('2022-02-01 00:00:00'))
  • 11月因为和之前已经创建的分区,时间相冲突,所以不会被创建。但11月22号到11月30号这段空白时间区间需要用户自己手动补上

5.1 动态分区表和手动分区表相互转换

一个表要么为动态分区表,要么为手动分区表

  • 手动分区表转换为动态分区表:可以通过alter table dynamic_partition set设置动态分区表的属性,来转化为动态分区表。注意:如果设置了dynamic_partition.start属性,则在分区单位之前的分区将会被自动删除
  • 动态分区表转换为手动分区表:可以通过命令alter table dynamic_partition set ('dynamic_partition.enable' = 'false');,来转化为手动分区表

6. 动态分区注意事项

动态分区使用过程中,如果因为一些意外情况导致dynamic_partition.start和 dynamic_partition.end之间的某些分区丢失,那么当前时间与dynamic_partition.end之间的丢失分区会被重新创建,dynamic_partition.start与当前时间之间的丢失分区不会重新创建

Apache Doris的动态分区dynamic_partition相关推荐

  1. Doris之动态分区(全面)

    动态分区 动态分区是在 Doris 0.12 版本中引入的新功能.旨在对表级别的分区实现生命周期管理(TTL),减少用户的使用负担. 目前实现了动态添加分区及动态删除分区的功能. 动态分区只支持 Ra ...

  2. doris 动态分区

    添加分区 ALTER TABLE v2x_olap_database.government_car ADD PARTITION p20221203 VALUES LESS THAN ("20 ...

  3. 社区动态|Apache Doris 携手 Tapdata,联合共建开放数据生态

    近日, 专注实时数据服务平台的 Tapdata ,宣布开源其数据源开发框架--PDK(Plugin Development Kit),并同步启动 PDK 插件生态共建计划 ,Apache Doris ...

  4. 应用实践 | Apache Doris 在网易互娱的应用实践

    编者荐语: 网易互娱于 2021 年 4 月引入了 Apache Doris 产品,目前已经发展为多个集群,服务数十个业务,在查询速度及易用性方面也得到了业务的认可,将来会有更多的业务正在往 Dori ...

  5. 【遇见Doris】Apache Doris在一点资讯自媒体平台的应用

    6月29日,Doris有幸得到中国信通院云大所.大数据技术标准推进委员会的支持,在中国信通院举行了0.11.0新版本预览线下沙龙.各位嘉宾都带来了干货满满的分享.关注Doris官方公众号,后台回复&q ...

  6. Apache Doris技术实践

    文章目录 1 Doris简述 1.1 Doris架构组成介绍 1.1.1 Doris的整体架构 1.1.2 FE 1.1.3 元数据 1.2 Doris特点 1.3 Doris的软硬件需求 1.4 D ...

  7. Apache Doris FE配置参数

    今天刚整理完,提了RP到社区,现在这发布一下,大家可以参考 Apache Doris 代码仓库地址:apache/incubator-doris 欢迎大家关注加星 Doris FE配置参数 该文档主要 ...

  8. Apache Doris 技术调研

    前言 本文隶属于专栏<大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 PPT 下载 Apache ...

  9. Apache Doris介绍

    一.关于 Apache Doris 和 DorisDB.StarRocks 的关系 Doris 最早是解决百度凤巢统计报表的专用系统,随着百度业务的飞速发展对系统进行了多次迭代,逐渐承担起百度内部业务 ...

最新文章

  1. 3dmax2021入门学习教程
  2. 从 Windows 切换到 Mac,不能错过这9条Tips
  3. Python中的Optional和带默认值的参数
  4. 第七章httpd.conf主配置文件的详解
  5. hive安装需要安装mysql区别_HIVE安装系列之一:在Linux中安装mysql,为其作为hive的metastore做准备...
  6. sscanf与正则表达式
  7. HDU2602Bone Collector 简单0-1背包
  8. 研发管理:产品研发团队的早会
  9. python lxml xpath爬取图片代码
  10. 2020年上半年巨量引擎手机行业白皮书
  11. 国内最火5款Java微服务开源项目
  12. 双向三相交错并联DC-DC变换器
  13. wxParse空格解析不生效的解决方案
  14. 这10道经典软件测试题,不会的话真会丢了工作!
  15. Android 最新所有框架
  16. Unity3d学习记录之回合制游戏
  17. RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors a
  18. 如何去掉Qt布局(Layout)内控件之间的空隙
  19. 如何优化路由器TP_Link AX1800 Wi-Fi6的稳定性 - “普联TL-XDR1860易展版“
  20. 【6G】通信感知一体化(SSaC:Symbiotic Sensing and Communications)概述

热门文章

  1. Air Kiss(飞吻)技术实现方案
  2. 凯元工具有必要买吗_深圳专属医疗险有必要买吗?
  3. 创投日报:10月16日收录投融资项目11起
  4. JSONObject类
  5. 简述液压泵工作的必要条件_试述液压泵工作的必要条件。
  6. 人工智能会引发失业潮吗?
  7. 【Typescript】paths alias别名设置
  8. 不用平衡因子及父节点来实现平衡二叉树
  9. 弱网测试----苹果手机
  10. 软件测试——VMware环境安装