Doris-数据分区

数据分区:即将大表划分为小表,数据分区主要有两个级别:Partition和Bucket(Tablet)。

Partition:逻辑分区,按照一定规则将表按照行进行划分,每个部分就是一个Partition。

Bucket:物理分区则,在物理上对每个Partition内的数据进行进一步的细分(按行)。分桶时,会选取一列,如Id,按照id的hashcode值%桶数,得到数据所在桶的位置。存储时,会创建文件夹对数据进行存储,文件夹的名字就是桶号。

Partition

Partition支持Range和List两种划分方式

Range(范围分区,单列分区):

PARTITION BY RANGE(data)

(

PATITION  p201701 VALUES LESS THAN(2017-02-01),

PATITION  p201702 VALUES LESS THAN(2017-03-01),【0201,0301)

PATITION  p201703 VALUES LESS THAN(2017-04-01),

)

Attention:分区的上界,前闭后开,当分区创建完成后,某个分区再被删除时,其他分区的范围并不受影响(分区空洞),但分区空洞可以通过创建新的分区进行补充。

Range(范围分区,多列分区):

PARTITION BY RANGE(`date`, `id`)
(
PARTITION `p201701_1000` VALUES LESS THAN ("2017-02-01", "1000"), #设置分区上界和id上界
PARTITION `p201702_2000` VALUES LESS THAN ("2017-03-01", "2000"),
PARTITION `p201703_all` VALUES LESS THAN ("2017-04-01") ,#没有指定时会按照默认值,同样遵守前闭后开原则
)

Attention:如果日期不在分界点上,可以只看日期,如果在分界点上,先比较日期,在比较后续字段的值,如果值大于分界点的值就落入前者分区,否则落入后者分区

List分区(单列分区):

支持BOOLEAN,TINYINT,SMALLINT,INT,BIGINT,LARGEINT.,CHAR...多种数据类型,当分区值为枚举值,只有当数据为目标分区枚举值其中之一时,才可以命中分区。

PARTITION BY List (”分区字段”)

(

PARTITION  “分区名” VALUES IN (“枚举值”,”枚举值”,”枚举值”)   

)

Attention: 当要插入的值与该分区中的值相同时,则插入该分区中

List分区(多列分区):

PARTITION BY List (”分区字段”,”分区字段”)

(

PARTITION  “分区名” VALUES IN ((“枚举值”,”枚举值”),(”枚举值”,”枚举值”))    

)

Attention:对于多列分区,只有所有字段的值都与该分区中的值相同时,才会插入该分区中

分桶

如果使用了分区,则DISTRIBUTED..描述的数据实在各个分区内划分规则,否则描述的时整张表的数据的划分规则。

Attention:

  1. 分桶可以时多列,但必须为KEY列,分桶列可以与分区列相同或不同
  2. 分桶列的选择实在查询吞吐和查询并发之间的一种权衡

如果选择多个分桶列,则经过Hash散列后,数据分布会更均匀

如果选择一个或少数分桶列,则数据分布较为集中

复合分区和单分区

复合分区:建表时不仅指定分区还会指定分桶

单分区:没有分区,只有分桶,此时Doris底层会将整张表作为一个分区

复合分区使用场景:

  1. 标中字段有时间维度或类似带有有序值的维度,可以以这类维度列作的分区列。
  2. 有删除历史数据的需求(比如仅保留最近N天的数据)可以通过删除除历史分区来达到目的。也可以通过在指定分区内发送DELETE语句进行数据出除
  3. 解决数据倾斜问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大时,可以通过指定分区的分桶数,合理划分不同分区的数据,分桶列建议选择区分度大的列

PROPERTIES

在建表语句中用于设置表的属性参数

常用属性有:

  1. replication_num(分片副本数):用于指定每个Tablet的副本数量,提高数据安全性并且能够在Sql执行过程中提高在本地查询命中的概率。副本数量在运行时可以进行修改,最大副本数量取决于集群中独立IP的数量
  2. Storage_medium(存储介质):默认存储介质可以通过fe的配置文件指定,默认为HDD,如果指定为SSD,则数据初始存放在SSD上,在没有storage_cooldown_time的情况下,默认30填后,数据会从SSD上自动迁移至HDD上,若指定,则按照指定时间迁移。
  3. Storage_cooldown_time(热数据冷却时间)

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

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

相关文章

【面试题】Rocketmq面试题总结

为什么使用消息队列(如RocketMQ)? 异步处理:解耦系统间调用,提高响应速度。解耦:降低模块间的直接依赖,使系统更易于扩展和维护。流量削峰:在高峰期将请求暂时存储起来,…

flink重温笔记(十):Flink 高级 API 开发——flink 四大基石之 State(涉及Checkpoint)

Flink学习笔记 前言:今天是学习 flink 的第 10 天啦!学习了 flink 四大基石之 State (状态),主要是解决大数据领域增量计算的效果,能够保存已经计算过的结果数据状态!重点学习了 state 的类型划…

相对于 Linux,Windows Server 存在的意义是什么?

相对于 Linux,Windows Server 存在的意义是什么? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux 的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给…

【LeetCode】389_找不同_C

题目描述 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 https://leetcode.cn/problems/find-the-difference/description/ 示例 示例 1: 输…

新版AndroidStudio的Gradle窗口显示task list not built 问题解决

在使用新版AndroidStudio时,会出现,Task List not built 的问题。如果你记得task的名字,当然可以 直接通过命令 gradle taskname 或者 ./gradlew taskName直接执行即可,但是若是记不住,还是把这个任务构建处理比较好用…

借助工具优化开发流程,提升开发体验

背景 最近在做一个demo,只有一个html页面,需要开启一个https web server,以此来实现在浏览器中访问。 改造前 改造前,每次修改文件保存后都要刷新一下浏览器。 如果只是短时间,每次修改后手动刷新浏览器也还行。主要…

C++:Stack和Queue的模拟实现

创作不易,感谢三连! 一、容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 就如同是电源适配器将不适用的交流电…

用不了google翻译怎么办?

如果无法使用谷歌翻译,你可以尝试以下方法: 寻找替代服务:可以搜索并了解其他翻译服务,如百度翻译、有道翻译等。这些服务通常提供免费或低价的翻译服务,以满足日常需求。使用本地翻译工具:在某些国家和地…

2k_Day1:今天是设计模式的大白话1

大白话: 原则有一点很难做到,就是定义好的类,只能加不能改(开放-关闭原则) 1.工厂模式就是,比如你定了一个汽车接口,然后小车、中车、大车都继承这个接口,这时,定一个汽…

在明确自己已经下载好了依赖库,但Vue3引用第三方模块报错Could not find a declaration file for module ***

在 Vue 3 TypeScript 项目中,引入第三方库时,有时会遇到该模块无定义文件的问题。通常,我们可以尝试以下两种方式解决: 方法 1: 使用 require 语句 在 TypeScript 文件中,使用 require 语句来代替 import 语句,例如…

day04-Maven

一、初识 Maven Maven 是 Apache 旗下的一个开源项目,是一款用于管理和构建 java 项目的工具。 官网:https://maven.apache.org/ Maven的作用 依赖管理(方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题)统一项目…

想开发苹果群控软件?先了解这些代码!

随着智能设备的普及,群控软件的需求日益增加,特别是针对苹果设备的群控软件,因其出色的性能和广泛的用户基础,受到了开发者们的青睐。 然而,开发一款功能强大的苹果群控软件并非易事,需要深入了解苹果的开…

获取C语言语句对应的汇编码和机器指令

借助IDE的调试功能 以CodeBlocks为例,先设置断点,然后点击红色三角形调试。 然后选择Debug➡ Debugging Windows➡Disassembly 就可以看到了 使用命令行 在工程文件中,一般可以找到一个.o文件。如果没有,可以先在program.c的目录下…

掌握java中继承

目录 1.概念: 2.使用: 3.super关键字 4.子类构造方法 5.super和this关键字 6.初始化时代码块的执行顺序 7.继承的方式 8.final关键字 1.概念: 是面向对象程序设计代码可以重复使用的重要手段,允许程序员在保持原有类特性的…

git入门到精通

第3章 Git常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地 状态 3.3.1 首次查看(工作区没有任何文件) 3.3.2 新增文件(hello.txt) 3.3.3 再次查者(检測到末追踪的文件) 3.4添加暫存区 3…

新手如何练习SQL?|掌握

对于新手想要练习SQL语句,可以从以下几个方面入手: 1. 建立理论基础 首先深入理解数据库的核心组件,包括数据库本身、其内部的各个表、表中的字段及其对应的数据类型(如字符串、整型、日期等),以及数据库…

java常用排序算法——冒泡排序,选择排序概述

前言: 开始接触算法了,记录下心得。打好基础,daydayup! 算法 算法是指解决某个实际问题的过程和方法 排序算法 排序算法指给混乱数组排序的算法。常见的有:冒泡排序,选择排序 冒泡排序: 冒泡排序指在数组…

python基础7_数据类型

在生活中举例 人是不是分为黑人,白人,黄种人(人的类型) 穿的衣服,休闲服装,修身的服装,运动服, 工装服,(衣服的类型) 同理,变量也有数据类型 那么怎么查看变量的数据类型呢? name "莫扎特" print(type(name)) 看看变量的几个常用的数据类型 int , float, boo…

python界面开发 - Label 提示框

文章目录 1. Label 提示框1.1. 显示文本1.2. 修改Label的文本1.2.1. 方式1:通过label.config()1.2.2. 方式2:通过 label["text"] 属性进行修改 1.3. 设置背景图片 2. Tkinter 开发3. python图形界面开发3.1. Python图形界面开发——Tkinter3.2…

C++从零开始的打怪升级之路(day45)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于二叉树的题目 1.根据二叉树创建字符串 606. 根…