Doris--基础--11--动态分区

2023-11-04

Doris–基础–11–动态分区


1、介绍

对表级别的分区实现生命周期管理(TTL),减少用户的使用负担。

1.1、功能

  1. 动态添加分区
  2. 动态删除分区

1.2、原理

在某些使用场景下,用户会将表按照天进行分区划分数据,在没有动态分区功能的时候,用户需要手动管理分区数据。这会给使用方带来额外的维护成本。

通过动态分区功能,用户可以在建表时设定动态分区的规则,FE 会启动一个后台线程,根据用户指定的规则创建或删除分区。

1.3、局限性

  1. 仅支持 单分区列的分区表 设定动态分区规则

2、使用方式

  1. 可以在 建表时 指定分区规则
  2. 可以在 运行时 修改分区规则

2.1、建表时指定

CREATE TABLE tbl1
(...)
PROPERTIES
(
    "dynamic_partition.prop1" = "value1",
    "dynamic_partition.prop2" = "value2",
    ...
)

2.2、运行时修改

ALTER TABLE tbl1 SET
(
    "dynamic_partition.prop1" = "value1",
    "dynamic_partition.prop2" = "value2",
    ...
)

3、动态分区规则 参数

3.1、配置文件

fe.conf

3.2、参数命名规则

dynamic_partition.参数

3.3、参数

3.3.1、dynamic_partition.enable

  1. 是否开启动态分区特性。
  2. 值:
    1. TRUE(默认)
    2. FALSE:Doris 会忽略该表的动态分区规则。

3.3.2、dynamic_partition.time_unit

  1. 动态分区调度的单位,表示按照什么时间(按天、按星期、按月)进行 分区的创建或分区的删除
  2. 值:
    1. HOUR:
      1. 分区名后缀格式为:yyyyMMddHH,例如2020032501。
      2. 小时为单位的分区列数据类型不能为DATE
    2. DAY:
      1. 分区名后缀格式为: yyyyMMdd,例如20200325。
    3. WEEK:
      1. 分区名后缀格式为: yyyy_ww,即当前日期属于这一年的第几周。
      2. 举例:例如 2020-03-25 创建的分区名后缀为 2020_13, 表明目前为2020年第13周。
    4. MONTH:
      1. 分区名后缀格式为:yyyyMM,例如 202003。

3.3.3、dynamic_partition.time_zone

  1. 动态分区的时区
  2. 默认值:当前机器的系统的时区,例如 Asia/Shanghai

3.3.4、dynamic_partition.start

  1. 动态分区的起始偏移,为负数。根据 time_unit 属性的不同,以当天(星期/月)为基准,分区范围在此偏移之前的分区将会被删除。
  2. 默认值: -2147483648,即不删除历史分区。

3.3.5、dynamic_partition.end

  1. 动态分区的结束偏移,为正数。根据 time_unit 属性的不同,以当天(星期/月)为基准,提前创建对应范围的分区。

3.3.6、dynamic_partition.prefix

  1. 分区名前缀。

3.3.7、dynamic_partition.buckets

  1. 动态创建的分区所对应的分桶数量。

3.3.8、dynamic_partition.replication_num

  1. 动态创建的分区所对应的副本数量
  2. 默认值:该表创建时指定的副本数量。

3.3.9、dynamic_partition.start_day_of_week

  1. 当 time_unit 为 WEEK 时,该参数用于指定每周的起始点。
  2. 值范围:
    1. 1 到 7。
    2. 1 表示周一
    3. 7 表示周日
  3. 默认值:1,即表示每周以周一为起始点。

3.3.10、dynamic_partition.start_day_of_month

  1. 当 time_unit 为 MONTH 时,该参数用于指定每月的起始日期。
  2. 值范围
    1. 1 到 28
    2. 1 表示每月1号
    3. 28 表示每月28号
  3. 默认值:1,即表示每月以1号位起始点。暂不支持以29、30、31号为起始日,以避免因闰年或闰月带来的歧义。

3.4、注意事项

动态分区使用过程中,如果因为一些意外情况导致dynamic_partition.start和dynamic_partition.end 之间的某些分区丢失

  1. 那么 当前时间 与 dynamic_partition.end 之间的丢失分区会被重新创建
  2. 那么 dynamic_partition.start 与 当前时间 之间的丢失分区不会重新创建。

4、演示1

  1. 表 tbl1,分区列 k1,类型为 DATE,创建一个动态分区规则。
  2. 按天分区,只保留最近7天的分区,并且预先创建未来3天的分区。

4.1、开启动态分区功能

  1. 可以 在fe.conf中设置
  2. 可以 使用命令 修改
  3. 可以 使用http请求 修改

4.1.1、使用http请求 修改

# 开启动态分区功能
curl --location-trusted -u root:123456 -XGET http://node1:8030/api/_set_config?dynamic_partition_enable=true


# 调度时间设置为5秒,意思是每过5秒根据配置刷新分区,这里设置为5秒,真实场景可以设置为12小时
curl --location-trusted -u root:123456 -XGET http://node1:8030/api/_set_config?dynamic_partition_check_interval_seconds=5

4.1.2、使用命令 修改

ADMIN SET FRONTEND CONFIG ("dynamic_partition_enable"="true");
ADMIN SET FRONTEND CONFIG ("dynamic_partition_check_interval_seconds"="5");

在这里插入图片描述

4.2、创建分区表

4.2.1、创建一张调度单位为天,可以删除历史分区的动态分区表

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 10
PROPERTIES(
	"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"
);


4.2.2、假设当前日期为 2023-02-25。则根据以上规则,tbl1 会产生以下分区:

p20230225: ["2023-02-25", "2023-02-26")
p20230226: ["2023-02-26", "2023-02-27")
p20230227: ["2023-02-27", "2023-02-28")
p20230228: ["2023-02-28", "2023-03-01")

show partitions from order_dynamic_partition1; 

在这里插入图片描述
在这里插入图片描述

4.3、分区 变化

  1. 在第二天,即2023-02-26,会创建新的分区 p20230229: [“2023-03-01”, “2023-03-02”)
  2. 在 2023-03-04 时,因为 dynamic_partition.start 设置为 7,则将删除7天前的分区,即删除分区 p20230225

4.3、查看分区表情况,更新最后调度时间

SHOW DYNAMIC PARTITION TABLES; 

在这里插入图片描述

4.4、插入测试数据

insert into order_dynamic_partition1 values(1,'2023-02-25 11:00:00', 200.0, '北京');
insert into order_dynamic_partition1 values(1,'2023-02-26 11:00:00', 200.0, '北京');
insert into order_dynamic_partition1 values(1,'2023-02-27 11:00:00', 200.0, '北京');

4.5、使用命令查看表下的所有分区

show partitions from order_dynamic_partition1;

在这里插入图片描述

5、演示2

  1. 表 tbl1,分区列 k1,类型为 date,创建一个动态分区规则。
  2. 按星期分区,只保留最近2个星期的分区,并且预先创建未来2个星期的分区

5.1、创建一张调度单位为周,保留最近两周的分区数据

 
CREATE TABLE order_dynamic_partition2
(
id int,
time date,
money double,
areaName varchar(50)
)
duplicate key(id,time)
PARTITION BY RANGE(time)()
DISTRIBUTED BY HASH(id) buckets 10
PROPERTIES(
	"dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "WEEK",
    "dynamic_partition.start" = "-2",
    "dynamic_partition.end" = "2",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "8"
);

	 

5.2、假设当前日期为 2023-02-15,tbl1 会产生以下分区

因为当前日期为 2023-02-15,是 2023 年的第8周。默认每周起始为星期一。则根于以上规则,tbl1 会产生以下分区

show partitions from order_dynamic_partition1;

在这里插入图片描述


p2023_08: ["2023-02-20", "2023-02-27")
p2023_09: ["2023-02-27", "2023-03-06")
p2023_10: ["2023-03-06", "2023-03-13")

  1. 每个分区的起始日期为当周的周一

5.3、分区 变化

  1. 在 2023-03-13,即第11周时,会删除2周前的分区,即删除 p2023_08。
  2. 在 2023-03-13,即第11周时,会创建新的分区 p2023_11: [“2023-03-13”, “2023-03-20”)

6、演示3

  1. 表 tbl1,分区列 k1,类型为 DATE,创建一个动态分区规则。
  2. 按月分区,不删除历史分区,并且预先创建未来2个月的分区。同时设定以每月3号为起始日。

6.1、创建一张调度单位为月,不删除历史数据

CREATE TABLE order_dynamic_partition3
(
id int,
time date,
money double,
areaName varchar(50)
)
duplicate key(id,time)
PARTITION BY RANGE(time)()
DISTRIBUTED BY HASH(id) buckets 10
PROPERTIES(
	"dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "MONTH",
    "dynamic_partition.end" = "2",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "8",
    "dynamic_partition.start_day_of_month" = "3"
);

  1. 因为没有设置 dynamic_partition.start,则不会删除历史分区。

6.2、假设当前日期为 2023-02-15,tbl1 会产生以下分区

show partitions from order_dynamic_partition3;

在这里插入图片描述

	
p202302: ["2023-02-03", "2023-03-03")
p202303: ["2023-03-03", "2023-04-03")
p202304: ["2023-04-03", "2023-05-03")

7、查看动态分区表调度情况

MySQL [test_db]> SHOW DYNAMIC PARTITION TABLES\G;
*************************** 1. row ***************************
             TableName: order_dynamic_partition2
                Enable: true
              TimeUnit: WEEK
                 Start: -2
                   End: 2
                Prefix: p
               Buckets: 8
        ReplicationNum: 3
     ReplicaAllocation: tag.location.default: 3
               StartOf: MONDAY
        LastUpdateTime: 2023-02-25 17:41:11
     LastSchedulerTime: 2023-02-25 18:05:41
                 State: NORMAL
LastCreatePartitionMsg: NULL
  LastDropPartitionMsg: NULL
ReservedHistoryPeriods: NULL
*************************** 2. row ***************************
......
*************************** 3. row ***************************
...... 

  1. LastUpdateTime: 最后一次修改动态分区属性的时间
  2. LastSchedulerTime: 最后一次执行动态分区调度的时间
  3. State: 最后一次执行动态分区调度的状态
  4. LastCreatePartitionMsg: 最后一次执行动态添加分区调度的错误信息
  5. LastDropPartitionMsg: 最后一次执行动态删除分区调度的错误信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doris--基础--11--动态分区 的相关文章

  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • 如何从类似于 eclipse 的命令行创建可运行的 jar 文件

    我知道 eclipse 会生成一个可运行的 jar 文件 其中提取并包含在该 jar 文件中的所有库 jar 文件 从命令提示符手动创建 jar 文件时如何执行类似的操作 我需要将所有 lib jar 解压到类文件夹中吗 目前我正在使用 j
  • python:numpy 运行脚本两次

    当我将 numpy 导入到 python 脚本中时 该脚本会执行两次 有人可以告诉我如何阻止这种情况 因为我的脚本中的所有内容都需要两倍的时间 这是一个例子 usr bin python2 from numpy import print t
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b
  • 如何成功使用RDAP协议代替whois

    我对新的 RDAP 协议有点困惑 也不知道何时进一步追求它有意义 在我看来 每个人都同意它是 whois 的继承者 但他们的数据库似乎是空的 在 ubuntu 上我尝试了 rdapper nicinfo 甚至他们的 RESTful API
  • 操作系统什么时候清除进程的内存

    进程在某些操作系统上成功或异常终止 操作系统何时决定擦除分配给该进程的内存 数据 代码等 在退出时或当它想为新进程分配内存时 这个清除内存分配过程在所有操作系统 winXP Win7 linux Mac 上都相同吗 据我了解 页表具有该进程
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 无法执行'x86_64-conda_cos6-linux-gnu-gcc':没有这样的文件或目录(pysam安装)

    我正在尝试安装 pysam 执行后 python path to pysam master setup py build 这个错误的产生是 unable to execute x86 64 conda cos6 linux gnu gcc
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构

随机推荐

  • 华为上机试题8(查找最大递减数)

    题目 给出一个非负整数 找到这个非负整数中包含的最大递减数 一个数字的递减数是指相邻的数位从大到小排列的数字 如 95345323 递减数有 953 95 53 53 532 32 那么最大的递减数为953 如果输入的数字为负数 返回 1
  • Webpack中Loader与Plugin

    前言 Webpack的核心功能是通过抽离出很多插件来实现的 因此系统内功能的划分粒度很细 这样做到了完美解偶同时又分工明确 代码容易维护 所以说插件机制是也是Webpack的核心知识 那么下面我们就来写介绍一下Loader与Plugin 并
  • DVWA-CSRF跨站请求伪造 Medium和Low级别

    1代码分析 过滤条件 if stripos SERVER HTTP REFERER SERVER SERVER NAME false 判断 SERVER SERVER NAME 在 SERVER HTTP REFERER 中是否存在 寻找第
  • 滴滴Chameleon 原生跳转vue界面 

    滴滴Chameleon 原生跳转vue界面 CmlWeexInstance reload url CmlWeexView getInstance reload url
  • 解决win10下localhost打不开的问题

    转自 https blog csdn net wk6333 article details 50678420 打开控制面板 添加或删除程序 然后但左侧栏的 启用或关闭Windows功能 把 Internet Information Serv
  • vue文件下载

    1 创建下载按钮
  • pidstat命令详解

    一 命令介绍 pidstat是sysstat工具中的一个命令 用于监控进程的cpu 内存 线程 IO及上下文切换等系统资源的占用情况 格式 pidstat options
  • SpringCloud-注册中心简单了解与使用

    前言 什么是SpringCloud 什么是微服务 能干什么 为什么要用SpringCloud 注册中心 什么是SpringCloud 大家都知道SpringCloud是一种微服务架构 模式 SpringCloud简单来说就是微服务架构技术落
  • ArrayList非线程安全记录

    一 问题描述 线上一个查询服务 偶尔会报一次查询出来的结果集合包含null 二 问题排查 在多线程查询过程中 使用了ArrayList 多线程查询出来后执行ArrayList add 然而ArrayList并不是线程安全的集合 会导致nul
  • linux红帽8怎么安yum,RedHat Linux 8本地Yum源配置方法

    1 挂载系统光盘到 mnt cdrom目录 mkdir p mnt cdrom mount dev sr0 mnt cdrom 2 设置系统启动后将光盘自动挂载到 mnt cdrom echo dev sr0 mnt cdrom iso96
  • 电商数据分析实战第一篇——客户消费行为分析

    一 分析背景 为了提高店铺的收益 进行准确的客户运营策略 使用店铺201910至202002的销售数据进行分析 根据客户的消费趋势 消费习惯把握客户的消费现状和心理 挖掘出高价值用户群体 完善销售运营策略 简单说明一下 客户分析包括基本属性
  • Upload LABS Pass-8

    第八关在后端使用了黑名单 并过滤了大小写 点以及空格 但并未过滤数据流 我们使用代理拦截请求 在文件后缀名中添加数据流 绕过黑名单 准备一个 8 php 文件 内容为一句话木马 上传 8 php 文件 并使用代理 此处使用 Burp Sui
  • JSON对象转换成字符串 相互转换 的几种方式

    在最近的工作中 使用到JSON进行数据的传递 特别是从前端传递到后台 前台可以直接采用ajax的data函数 按json格式传递 后台Request即可 但有的时候 需要传递多个参数 后台使用request进行接收 有时传递了几个数值 还好
  • 嵌套和递归使用模板类

    嵌套和递归使用模板类 模板栈 模板数组 栈中嵌套数组 数组中嵌套栈 数组中嵌套数组 模板栈 pragma once include
  • 计算机网络——网络层

    这篇文章是计算机网络系列文章的第三篇 计算机网络 物理层 计算机网络 数据链路层 计算机网络 网络层 计算机网络 传输层 计算机网络 应用层 序言 计算机网络中的网络层在当今的社会起到了什么作用 现在的互联网通信 远程办公和远程教育 电子商
  • 基于Dragonboard 410c进行开发的远程遥控机器人(三)

    前面说过 买的camera的夹层板要直接连到410c开发板上 这样96boards 就没有接口去连接了 无奈 智能自己飞线了 开始还担心 这样连接板子会不会出问题 经过最终的验证 发现是可以的 完全没有影响 接下来看一下最后的验证 图 远程
  • 安卓keytool获取不到签名文件的MD5

    目前通过 keytool list v keystore xxx jks 这种方法获取签名的md5时 只能显示SHA1和SHA256 不显示md5 解决办法 1 先将自己的keystore配置进app下的build gradle中 2 打开
  • 关键字参数和可选参数

    通常Fortran的实参和形参的参数数量以及类型必须是匹配的 但是如果过程接口是显式的 那么就可以改变参数表中调参数的顺序 或为过程的某些iochengde形参特别指定实参 通过将过程放在模块中 并在调用程序中用use关联访问模块 可以显式
  • C#中的BeforeFieldInit

    今天学习设计模式中的单例模式 无意间发现了这个标志BeforeFieldInit 于是简单地搜索了一下 总结出如下内容 The C specification states The static constructor for a clas
  • Doris--基础--11--动态分区

    Doris 基础 11 动态分区 1 介绍 对表级别的分区实现生命周期管理 TTL 减少用户的使用负担 1 1 功能 动态添加分区 动态删除分区 1 2 原理 在某些使用场景下 用户会将表按照天进行分区划分数据 在没有动态分区功能的时候 用