news 2026/6/10 17:18:13

doris的分区配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
doris的分区配置

好的,我们来详细解释一下 Doris 数据库中的分区配置。

Doris 支持两种主要的分区类型:范围分区列表分区。它们用于将大表的数据划分成更小的、更易于管理的部分(称为分区),这有助于提高查询效率(特别是通过分区裁剪)、简化数据管理(如删除旧分区)以及优化某些类型的查询。

1. 范围分区

范围分区是最常用的分区类型。它根据用户指定的分区列的值范围将数据划分到不同的分区中。通常用于时间序列数据(如按天、按月分区)或连续数值数据(如按 ID 范围)。

  • 分区键:必须是一个或多个列(通常是日期或整数类型)。在建表语句中,使用PARTITION BY RANGE指定。
  • 分区值:定义每个分区的边界值范围(左闭右开区间[start_value, end_value))。
  • 动态分区:Doris 提供了强大的动态分区功能,可以自动管理时间序列分区(如每天自动创建新分区、删除旧分区)。

示例:按日期范围分区

CREATE TABLE IF NOT EXISTS example_db.example_range_tbl ( `user_id` LARGEINT NOT NULL COMMENT "用户id", `date` DATE NOT NULL COMMENT "数据灌入日期时间", `city` VARCHAR(20) COMMENT "用户所在城市", `age` SMALLINT COMMENT "用户年龄", `sex` TINYINT COMMENT "用户性别", `last_visit_date` DATETIME DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间", `cost` BIGINT DEFAULT "0" COMMENT "用户总消费", `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间", `min_dwell_time` INT DEFAULT "0" COMMENT "用户最小停留时间" ) ENGINE=olap DUPLICATE KEY(`user_id`, `date`) PARTITION BY RANGE(`date`) -- 指定分区键为 date 列 ( PARTITION `p202207` VALUES LESS THAN ("2022-08-01"), -- 分区 p202207 包含 2022-07-01 到 2022-07-31 的数据 PARTITION `p202208` VALUES LESS THAN ("2022-09-01"), PARTITION `p202209` VALUES LESS THAN ("2022-10-01") ) DISTRIBUTED BY HASH(`user_id`) BUCKETS 16 PROPERTIES ( "replication_num" = "3" );

动态分区配置示例

启用并配置动态分区,通常需要设置以下参数:

-- 在表 PROPERTIES 中添加动态分区配置 ALTER TABLE example_db.example_range_tbl SET ( "dynamic_partition.enable" = "true", -- 开启动态分区 "dynamic_partition.time_unit" = "DAY", -- 分区的时间单位(DAY/WEEK/MONTH) "dynamic_partition.start" = "-7", -- 动态分区的起始偏移(当前时间的前7天) "dynamic_partition.end" = "3", -- 动态分区的结束偏移(当前时间的后3天) "dynamic_partition.prefix" = "p", -- 动态分区名前缀 "dynamic_partition.buckets" = "32" -- 动态分区的分桶数量 );

2. 列表分区

列表分区适用于分区列的取值是离散的、可枚举的情况(如城市、省份、状态等)。它将数据划分到不同的分区中,每个分区对应分区列的一个或多个具体值。

  • 分区键:通常是一个列(字符串类型或整数类型)。在建表语句中,使用PARTITION BY LIST指定。
  • 分区值:使用VALUES IN (...)为每个分区指定一组该分区包含的离散值。

示例:按城市列表分区

CREATE TABLE IF NOT EXISTS example_db.example_list_tbl ( `user_id` LARGEINT NOT NULL COMMENT "用户id", `date` DATE NOT NULL COMMENT "数据灌入日期时间", `city` VARCHAR(20) NOT NULL COMMENT "用户所在城市", -- 作为分区键 `age` SMALLINT COMMENT "用户年龄", `sex` TINYINT COMMENT "用户性别", `last_visit_date` DATETIME DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间", `cost` BIGINT DEFAULT "0" COMMENT "用户总消费", `max_dwell_time` INT DEFAULT "0" COMMENT "用户最大停留时间", `min_dwell_time` INT DEFAULT "0" COMMENT "用户最小停留时间" ) ENGINE=olap DUPLICATE KEY(`user_id`, `date`) PARTITION BY LIST(`city`) -- 指定分区键为 city 列 ( PARTITION `p_beijing` VALUES IN ("Beijing"), -- 包含 city = "Beijing" 的数据 PARTITION `p_shanghai` VALUES IN ("Shanghai"), PARTITION `p_guangzhou_shenzhen` VALUES IN ("Guangzhou", "Shenzhen") -- 包含多个值 ) DISTRIBUTED BY HASH(`user_id`) BUCKETS 16 PROPERTIES ( "replication_num" = "3" );

重要注意事项

  1. 分区键选择:选择合适的分区键至关重要。它应该:
    • 是查询过滤条件中经常出现的列(以实现分区裁剪)。
    • 具有将数据均匀分散的能力(避免数据倾斜)。
    • 对于范围分区,最好是单调递增的列(如时间)。
  2. 分区数量:分区数量不宜过多或过少。过多会增加元数据管理开销;过少则可能无法有效利用分区裁剪的优势,且单个分区过大影响性能。Doris 建议一个表的分区数量最好在1000 个以内
  3. 分区与分桶:分区是粗粒度的数据划分(一级分区),分桶是细粒度的数据划分(二级分区,在DISTRIBUTED BY HASH中指定)。两者结合使用效果更佳。分桶数量建议在10 到 100 个之间
  4. 动态分区管理:对于时间序列数据,强烈建议使用动态分区功能来自动化管理分区的生命周期(创建、删除)。
  5. 修改分区:可以通过ALTER TABLE ... ADD/DROP PARTITION命令手动添加或删除分区。对于列表分区,还可以使用ALTER TABLE ... MODIFY PARTITION ... ADD/DROP VALUES修改分区包含的值。

请根据你的具体业务场景(数据特性、查询模式)来选择合适的分区类型并进行配置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:11:06

健康160终极抢号神器:5分钟掌握全自动挂号工具91160-cli

健康160终极抢号神器:5分钟掌握全自动挂号工具91160-cli 【免费下载链接】91160-cli 健康160全自动挂号脚本 项目地址: https://gitcode.com/gh_mirrors/91/91160-cli 还在为健康160平台抢号难而发愁吗?热门医生号源秒光,手动刷新总是…

作者头像 李华
网站建设 2026/5/26 14:37:16

Dify平台能否用于构建AI诗人?古典诗词格律遵循度

Dify平台能否用于构建AI诗人?古典诗词格律遵循度 在当前大语言模型(LLM)席卷内容创作领域的浪潮中,一个有趣而富有挑战的问题浮现出来:我们能否用AI写出一首真正“合格”的古典诗词? 不是那种看似文雅、实则…

作者头像 李华
网站建设 2026/6/10 15:08:53

BilibiliDown终极教程:便捷获取B站高清视频的完整指南

还在为无法离线观看B站精彩内容而烦恼吗?BilibiliDown作为一款完全开源的工具,能够帮助你便捷保存Bilibili平台的视频、音频和弹幕文件。无论你是想要收藏UP主的优质作品,还是需要离线学习教学视频,这款工具都能满足你的需求。本教…

作者头像 李华
网站建设 2026/6/10 2:53:49

B站CC字幕下载与转换终极指南:新手也能快速掌握的完整教程

B站CC字幕下载与转换终极指南:新手也能快速掌握的完整教程 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为B站视频的字幕下载而烦恼吗&#xff…

作者头像 李华
网站建设 2026/6/10 14:27:42

3天精通RocketMQ+Flink实时数据处理架构设计与实战

3天精通RocketMQFlink实时数据处理架构设计与实战 【免费下载链接】rocketmq-flink RocketMQ integration for Apache Flink. This module includes the RocketMQ source and sink that allows a flink job to either write messages into a topic or read from topics in a fl…

作者头像 李华
网站建设 2026/6/10 15:09:35

终极指南:零基础打造高性能谐波驱动赤道仪

终极指南:零基础打造高性能谐波驱动赤道仪 【免费下载链接】AlkaidMount HarmonicDrive equatorial mount 项目地址: https://gitcode.com/gh_mirrors/al/AlkaidMount 您是否曾经梦想过拥有一台专业级天文望远镜,却因高昂的价格而却步&#xff1f…

作者头像 李华