当前位置: 首页 > news >正文

Doris中分区和分桶使用教程

1 分区与分桶


    Doris中有两层的数据划分,第一层是分区(Partition),第二层是分桶(Bucket),
    Partition又能分为Range分区和List分区。
    Bucket仅支持Hash方式。

1.1 Partition
    只能指定Key列作为分区列
    指定分区值时需要加双引号
    理论上分区数量没有上限
    在不使用分区建表时,系统会自动创建一个表名一致但是用户不可见的全表分区
1.1.1 Partition_Range:
    按照指定范围进行分区,一般生产环境下会使用日期作为分区

    VALUES LESS THAN (...) :仅指定上界,系统会将前一个分区的上界作为该分区的下界,会生成一个左闭右开的区间
    VALUES [....) :同时指定上下界,比较好理解,也会生成一个左闭右开的区间

   查看Partition的使用命令:HELP PARTITION;

示例:

-- 创建一张Range分区表
 

CREATE TABLE IF NOT EXISTS test.student
(`id` LARGEINT NOT NULL COMMENT "学生id",`name` VARCHAR(50) NOT NULL COMMENT "学生名字",`class` INT COMMENT "学生所在班级",`age` SMALLINT COMMENT "学生年龄",`sex` TINYINT COMMENT "学生性别",`phone` LARGEINT COMMENT "学生电话",`address` VARCHAR(500) COMMENT "学生家庭地址",`date` DATE NOT NULL COMMENT "数据录入时间"
)
ENGINE=olap
DUPLICATE KEY(`id`, `name`)
PARTITION BY RANGE(`date`)
(PARTITION `d202204` VALUES LESS THAN ("2022-04-01"),PARTITION `d202205` VALUES LESS THAN ("2022-05-01"),PARTITION `d202206` VALUES LESS THAN ("2022-06-01")
)DISTRIBUTED BY HASH(`id`) BUCKETS 8
PROPERTIES
("replication_num" = "3","storage_medium" = "SSD","storage_cooldown_time" = "2022-06-16 12:00:00"
);


 
查看表的分区SHOW PARTITIONS FROM TABLE; 


1.1.2 Partition_List:

    分区支持的数据类型:BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME, CHAR, VARCHAR
    分区值是枚举值,当数据在目标分区枚举值中时,才能命中分区
    操作:VALUES IN(....)
示例:

-- 创建一张List分区表
 

CREATE TABLE IF NOT EXISTS test.student
(`id` LARGEINT NOT NULL COMMENT "学生id",`name` VARCHAR(50) NOT NULL COMMENT "学生名字",`class` INT NOT NULL COMMENT "学生所在班级",`age` SMALLINT COMMENT "学生年龄",`sex` TINYINT COMMENT "学生性别",`phone` LARGEINT COMMENT "学生电话",`address` VARCHAR(500)  NOT NULL COMMENT "学生家庭地址"
)
ENGINE=olap
DUPLICATE KEY(`id`, `name`)
PARTITION BY List(`address` )
(PARTITION `p_city1` VALUES IN ("浦东","闵行"),PARTITION `p_city2` VALUES IN ("海淀","昌平"),PARTITION `p_city3` VALUES IN ("太原","忻州")
)DISTRIBUTED BY HASH(`id`) BUCKETS 8
PROPERTIES
("replication_num" = "3","storage_medium" = "SSD","storage_cooldown_time" = "2022-06-17 12:00:00"
);


1.2 Backet(分桶):

    如果创建的表是分区表,那么Backet就是对分区进行Distributed划分,如果不是分区表那么就是对整个表进行划分。
    分桶列只能是Key列,分桶列可以和分区列相同或不同。
    分桶列的多少取决于对“吞吐”和“并发”的一种权衡。
    分桶列多,数据分布的更加均匀,适合大吞吐低并发的查询,不适合高并发的单查询。
    分桶列少,适合高并发的点查询。
    分桶数量理论上无上限,但是要结合实际资源情况进行设置。
    复合分区和单分区:
    复合分区:既有分区又有分桶。

    单分区:只有分桶。

1.2.1 复合分区的选用场景:

    有时间或序值维度的可以使用复合分区。
    需要对历史数据进行清理,对N天前的数据进行清理,或者保留N天的数据,可以使用复合分区。
    可以解决数据倾斜问题,按天进行分区,那么可能某天的数据量会很大,那么可以调整分桶的数量来达到数据均衡分布的效果,在选着分桶列时要选择数据量差异较大的列。
    多列分区:

    在指定分区列时,可以在Key中再指定一个字段作为分区列,插入数据时,会首先按照分区列的值依次进行比较
 

http://www.lryc.cn/news/144012.html

相关文章:

  • 电脑不安装软件,怎么将手机文件传输到电脑?
  • vue3 publish 出现的问题
  • 网络防御和入侵检测
  • 【科研论文配图绘制】task5 SciencePlots绘图包入门
  • R语言常用数学函数
  • 公网远程访问局域网SQL Server数据库
  • Apache Celeborn 让 Spark 和 Flink 更快更稳更弹性
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:141-160)
  • Windows-docker集成SRS服务器的部署和使用
  • element-ui table表格滚动条拉到最右侧 表头与内容不能对齐
  • React中的性能测试工具组件Profiler的基本使用
  • 提升生产效率,降低运维成本:纺织业物联网网关应用
  • 【学习笔记】求解线性方程组的G-S迭代法
  • Kotlin协程flow缓冲buffer
  • 完全免费的GPT,最新整理,2023年8月24日,已人工验证,不用注册,不用登录,更不用魔法,点开就能用
  • LeetCode538. 把二叉搜索树转换为累加树
  • TP6 使用闭合语句查询多个or的模型语句
  • 浅析Linux SCSI子系统:设备管理
  • 爬虫逆向实战(二十五)--某矿采购公告
  • DPLL 算法之分裂策略
  • Jmeter+ServerAgent
  • 打破数据孤岛!时序数据库 TDengine 与创意物联感知平台完成兼容性互认
  • ubuntu22安装和部署Kettle8.2
  • 修复 Ubuntu Linux 中的“找不到命令‘python’”错误
  • 【业务功能篇86】微服务-springcloud-系统性能压力测试-jmeter-性能优化-JVM参数调优
  • mysql的登录与退出
  • SOLIDWORKS工程图转DWG图层映射技巧
  • PMAC与Modbus主站进行Modbus Tcp通讯
  • MyBatis分页插件PageHelper的使用及MyBatis的特殊符号---详细介绍
  • Qt(C++)计算一段程序执行经过的时间