news 2026/5/1 5:12:56

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/5/1 5:12:23

免费音频转换新革命:fre:ac带你解锁数字音乐处理全技能

还在为音频格式不兼容而烦恼?fre:ac这款开源神器将彻底改变你的音频处理体验!作为一款功能全面的免费音频转换器,它不仅能轻松处理各种音频格式转换,还集成了CD抓取、标签编辑等专业功能,让你真正实现音频处理的自由掌…

作者头像 李华
网站建设 2026/5/1 5:12:19

macOS OBS虚拟摄像头完整配置手册:轻松实现专业级视频输出

macOS OBS虚拟摄像头完整配置手册:轻松实现专业级视频输出 【免费下载链接】obs-mac-virtualcam ARCHIVED! This plugin is officially a part of OBS as of version 26.1. See note below for info on upgrading. 🎉🎉🎉Creates …

作者头像 李华
网站建设 2026/4/23 21:28:49

京东抢购助手V2:5分钟学会的自动下单终极指南

还在为抢不到心仪商品而烦恼吗?京东抢购助手V2是一款专业的Python抢购脚本,作为强大的电商自动化工具,它能帮您在秒杀时刻自动完成下单,彻底告别手速焦虑。这款秒杀神器让每个人都能享受到公平的抢购机会。 【免费下载链接】jd-as…

作者头像 李华
网站建设 2026/4/23 9:59:52

Cursor限制解除全攻略:go-cursor-help工具让AI编码重回巅峰

还在为Cursor AI编辑器的各种限制而烦恼吗?每次灵感迸发时却被"试用次数已用完"的提示打断,这种体验确实让人抓狂。今天我要向大家推荐一个开源利器——go-cursor-help项目,它能一站式解决Cursor的四大核心限制,让你的编…

作者头像 李华
网站建设 2026/4/12 6:37:41

CREO到URDF转换工具:让机器人仿真更简单

CREO到URDF转换工具:让机器人仿真更简单 【免费下载链接】creo2urdf Generate URDF models from CREO mechanisms 项目地址: https://gitcode.com/gh_mirrors/cr/creo2urdf 还在为CREO模型无法直接在机器人仿真环境中使用而烦恼吗?creo2urdf这款开…

作者头像 李华
网站建设 2026/4/22 16:34:57

Artisan咖啡烘焙软件:免费专业烘焙曲线监控终极指南

Artisan咖啡烘焙软件:免费专业烘焙曲线监控终极指南 【免费下载链接】artisan artisan: visual scope for coffee roasters 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 想要掌握咖啡烘焙的精髓,却苦于无法精准记录温度变化&#xff1f…

作者头像 李华