Doris动态分区(十四)

动态分区是在 Doris 0.12 版本中引入的新功能。旨在对表级别的分区实现生命周期管理(TTL),减少用户的使用负担。

目前实现了动态添加分区及动态删除分区的功能。动态分区只支持 Range 分区。

原理

在某些使用场景下,用户会将表按照天进行分区划分,每天定时执行例行任务,这时需要使用方手动管理分区,否则可能由于使用方没有创建分区导致数据导入失败,这给使用方带来了额外的维护成本。

通过动态分区功能,用户可以在建表时设定动态分区的规则。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",...
)

动态分区规则参数

主要参数

动态分区的规则参数都以 dynamic_partition. 为前缀:

创建历史分区的参数

dynamic_partition.create_history_partition

默认为 false。当置为 true 时,Doris 会自动创建所有分区,当期望创建的分区个数大于 max_dynamic_partition_num 值时,操作将被禁止。当不指定 start 属性时,该参数不生效。

dynamic_partition.history_partition_num

当 create_history_partition 为 true 时,该参数用于指定创建历史分区数量。默认值为 -1, 即未设置。

dynamic_partition.hot_partition_num

指定最新的多少个分区为热分区。对于热分区,系统会自动设置其 storage_medium 参数为 SSD,并且设置 storage_cooldown_time。

hot_partition_num 是往前 n 天和未来所有分区

我们举例说明。假设今天是 2021-05-20,按天分区,动态分区的属性设置为:

hot_partition_num=2, end=3, start=-3。则系统会自动创建以下分区,并且设置 storage_medium 和 storage_cooldown_time 参数:

p20210517 : ["2021-05-17", "2021-05-18") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210518 : ["2021-05-18", "2021-05-19") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210519 : ["2021-05-19", "2021-05-20") storage_medium=SSD storage_cooldown_time=2021-05-21 00:00:00
p20210520 : ["2021-05-20", "2021-05-21") storage_medium=SSD storage_cooldown_time=2021-05-22 00:00:00
p20210521 : ["2021-05-21", "2021-05-22") storage_medium=SSD storage_cooldown_time=2021-05-23 00:00:00
p20210522 : ["2021-05-22", "2021-05-23") storage_medium=SSD storage_cooldown_time=2021-05-24 00:00:00
p20210523 : ["2021-05-23", "2021-05-24") storage_medium=SSD storage_cooldown_time=2021-05-25 00:00:00
dynamic_partition.reserved_history_periods

需要保留的历史分区的时间范围。当 dynamic_partition.time_unit 设置为"DAY/WEEK/MONTH" 时,需要以 [yyyy-MM-dd,yyyy-MM-dd],[...,...] 格式进行设置。当dynamic_partition.time_unit 设置为 "HOUR" 时,需要以 [yyyy-MM-dd HH:mm:ss,yyyy-MM-dd HH:mm:ss],[...,...] 的格式来进行设置。如果不设置,默认为 "NULL"。

我们举例说明。假设今天是 2021-09-06,按天分类,动态分区的属性设置为:

time_unit="DAY/WEEK/MONTH", \
end=3, \
start=-3, \
reserved_history_periods="[2020-06-01,2020-06-20],[2020-10-31,2020-11-15]"。

则系统会自动保留:

["2020-06-01","2020-06-20"],
["2020-10-31","2020-11-15"]

或者

time_unit="HOUR", \
end=3, \
start=-3, \
reserved_history_periods="[2020-06-01 00:00:00,2020-06-01 03:00:00]".

则系统会自动保留:

["2020-06-01 00:00:00","2020-06-01 03:00:00"]

这两个时间段的分区。其中,reserved_history_periods 的每一个 [...,...] 是一对设置项,两者需要同时被设置,且第一个时间不能大于第二个时间。

创建历史分区规则

假设需要创建的历史分区数量为 expect_create_partition_num,根据不同的设置具体数量如下:

(1)create_history_partition = true

① dynamic_partition.history_partition_num 未设置,即 -1.

则 expect_create_partition_num = end - start;

② dynamic_partition.history_partition_num 已设置

则 expect_create_partition_num = end - max(start, -histoty_partition_num);

(2)create_history_partition = false

不会创建历史分区,expect_create_partition_num = end - 0;

(3)当 expect_create_partition_num > max_dynamic_partition_num(默认 500)时,禁止创建过多分区。

创建历史分区举例

假设今天是 2021-05-20,按天分区,动态分区的属性设置为:create_history_partition=true, end=3, start=-3, history_partition_num=1,则系统会自动创建以下分区:

p20210519
p20210520
p20210521
p20210522
p20210523

history_partition_num=5,其余属性与 1 中保持一直,则系统会自动创建以下分区:

p20210517
p20210518
p20210519
p20210520
p20210521
p20210522
p20210523

history_partition_num=-1 即不设置历史分区数量,其余属性与 1 中保持一直,则系统 会自动创建以下分区:

p20210517
p20210518
p20210519
p20210520
p20210521
p20210522
p20210523

注意事项

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

示例

1)创建动态分区表

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

create table student_dynamic_partition1
(id int,
time date,
name varchar(50),
age int
)
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"
);

2)查看动态分区表调度情况

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

3)查看表的分区

SHOW PARTITIONS FROM student_dynamic_partition1;

4)插入测试数据,可以全部成功(修改成对应时间)

insert into student_dynamic_partition1 values(1,'2022-03-31 11:00:00','name1',18);
insert into student_dynamic_partition1 values(1,'2022-04-01 11:00:00','name1',18);
insert into student_dynamic_partition1 values(1,'2022-04-02  11:00:00','name1',18);

5)设置创建历史分区

ALTER TABLE student_dynamic_partition1 SET ("dynamic_partition.create_history_partition" = "true");

查看分区情况

SHOW PARTITIONS FROM student_dynamic_partition1;

6)动态分区表与手动分区表相互转换

对于一个表来说,动态分区和手动分区可以自由转换,但二者不能同时存在,有且只有一种状态。

(1)手动分区转换为动态分区

如果一个表在创建时未指定动态分区,可以通过 ALTER TABLE 在运行时修改动态分区相关属性来转化为动态分区,具体示例可以通过 HELP ALTER TABLE 查看。

注意:如果已设定 dynamic_partition.start,分区范围在动态分区起始偏移之前的历史分区将会被删除。

(2)动态分区转换为手动分区

ALTER TABLE tbl_name SET ("dynamic_partition.enable" = "false") 

关闭动态分区功能后,Doris 将不再自动管理分区,需要用户手动通过 ALTER TABLE 的方式创建或删除分区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP while 和 do-while 循环 学习资料

PHP while 和 do-while 循环 在 PHP 中,while 和 do-while 是两种常用的循环结构,用于重复执行一段代码,直到满足指定条件为止。以下是对这两种循环的介绍和示例: while 循环 while 循环用于在指定条件为真时重复执行代码块。循…

计算机基础知识——字,字节,进制,short,byte等

目录 进制位,字节,字Byte,ShortByteBuf有符号数和无符号数 进制 HEX,Hexadecimal ,十六进制。 DEC,Decimal ,十进制。 OCT,Octal ,八进制。 BIN,Binary &a…

【Android】声浪 UI 效果并附上详细代码

声浪效果是基于第三方实现的。 https://github.com/xfans/VoiceWaveView 将三方的 Kotlin 代码转 java 使用(按照他的readme 进行依赖,好像少了点东西,至少本项目跑不起来) 声浪效果在android 8 以上都是比较好的,不会…

外卖配送小程序商城的效果如何

线下餐饮店非常多,主要以同城生意为主,在线上电商和外卖平台的冲击下,传统商家仅通过传统方式经营很难宣传拓客及转化等,线上是必要的渠道,但入驻第三方平台又会有各种困扰,抽成/佣金/流量费/激烈竞争等。 …

【云原生-Kurbernetes篇】 玩转K8S不得不会的HELM

Helm 一、Helm1.1 使用背景1.2 Helm简介1.3 Helm的几个概念1.4 helm2 和 helm3 的区别1.5 chart包的关键组成 二、Helm相关命令2.1 应用管理操作2.2 Helm repository仓库管理命令2.2 Helm chart包管理命令2.3 Helm release(实例) 管理命令2.4 Helm私有仓库管理命令 三、部署He…

国外Twilio 发送sms短信

private static final String userName "Account SID"; private static final String password "Auth Token"; private String fromPhone; //你的手机号(平台购买的手机号)/*** 发送短信* */public static Map sms(String toPh…

Linux常用操作 Vim一般使用 SSH介绍 SSH密钥登录

目录 1. 常用命令 2. vim一般使用 3. SSH介绍 4. ssh密钥登录 1. 常用命令 1)# 与 $ 提示的区别 # 表示用户有root权限,一般的以root用户登录提示符为#, $提示符表示用户为普通用户 2)ifconfig 查看ip地址 eno1: 代表由主板…

“图纸保密大作战:上海迅软DSE解决方案守护机械公司核心资料

机械行业是我国重要的工业制造行业之一,相关企业在发展中往往需要用到ERP、PDM、PLM等系统来对产品信息进行管理,其中便涉及到大量文档和图纸等重要数据。然而随着业务的快速发展和数字化转型,机械行业也面临着如数据泄露、外来袭击攻击、内部…

以45°斜抛水平距离最远

已知:斜抛物体的初速度为 v 0 v_0 v0​(与水平方向的夹角为 θ \theta θ),重力加速度为 g g g。 求:抛物轨迹方程? 垂直方向的速度为 v y v 0 sin ⁡ θ − g t v_yv_0 \sin \theta -gt vy​v0​sinθ−…

CNVD-2023-12632:泛微E-cology9 browserjsp SQL注入漏洞复现 [附POC]

文章目录 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC] 0x…

如何查找批量企业的联系方式?

​我们都知道,企业的联系方式在企业的年报中就能找到,但是年报上的电话真的是你要找的吗? 很多企业年报上留的是第三方代记账公司,或者是其他没用的号码,这对于做B端业务的企业来说是不够精准的。 市面上有很多做企业…

一起学docker系列之六如何搭建私服版本的Docker镜像仓库

目录 前言1 下载并运行私服版本的Docker镜像仓库2 准备上传私服的Docker镜像3 为镜像打上符合私服规范的标签4 修改Docker守护进程的配置文件5 推送镜像到私服版本的Docker镜像仓库6 验证私服的镜像结语 前言 Docker是一种开源的容器技术,可以让开发者和运维人员快…

Android : ListView + BaseAdapter-2简单应用

​​容器与适配器:​​​​​ http://t.csdnimg.cn/ZfAJ7 实体类 News.java package com.example.mylistviewadapter2.entity;public class News {private String title;private String content;private int img;public News(String title, String conte…

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后,贴入导出文件的文件夹,然后按F2即可导出到目标文件夹。

2023年最佳Aspera替代方案,选择适合的Aspera替代方案

查找当前可用的Aspera替代方案。比较 2023年Aspera替代方案的评级、评论、定价和功能。列出了市场上最好的Aspera替代方案,它们提供与 IBM Aspera 类似的竞争产品。对下面的Aspera替代方案进行排序,以根据需求做出最佳选择。 1、镭速 镭速(私…

java继承和重写(代码演示)

java中的继承和重写 概念 继承 在 Java 中,继承是面向对象编程中的重要概念,它允许一个类(称为子类)继承另一个类(称为父类)的属性和方法。子类可以继承父类的非私有属性和方法,并且可以添加…

Android U 匹配不到APN,无法发起数据建立的问题分析

问题 打开数据开关后,没有data PDN请求发起,因此无法上网。 根据日志确定是没有找到合适的data profile,原因一般有: 1、APN 没有配置 2、APN 类型/网络能力不满足——APN type或bearer 3、APN 配置了但被disable了——APN p…

每日一题 2304. 网格中的最小路径代价(中等,动态规划)

由于他每一行的每一个值都可以到下一行的所有节点,且路径的代价没有什么相关性,所以只能用 O(mn2) 的动态规划求解 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])…

redis作为缓存详解

目录 前言: 为什么说关系型数据库性能不高 如何提高MySQL并发量 缓存更新策略 定期更新 实时更新 内存淘汰策略 Redis内置的淘汰策略 缓存常见问题 缓存预热 缓存穿透 缓存雪崩 缓存击穿 前言: 对于缓存的理解,缓存目的就是为了…

Https攻击怎么防御

随着互联网技术的发展,网站所遭受的网络攻击频率也在不断上升。某种程度上,我们可以说互联网上的每个网站都容易遭受安全攻击。因为网络攻击者最主要的动机是求财。无论你运营的是电子商务项目还是简单的小型商业网站,潜在攻击的风险就在那里…