CodeWalk

Doris动态分区与自动分桶管理

作者:孤独的心 · 2026-05-30 12:55

Doris的动态分区(Dynamic Partition)如何实现自动创建和管理时间分区?请解释动态分区的配置参数(time_unit/start/end/prefix),以及PROPERTIES ('dynamic_partition'='true')的完整配置示例。动态分区+自动分桶如何减少运维工作量?

回答

孤独的心

Doris动态分区详解:

1. 动态分区的作用

  • 自动创建未来的时间分区(无需手动提前建)
  • 自动删除过期的历史分区(节省存储空间)
  • 自动修改分区的副本数

2. 配置示例

CREATE TABLE events (
  event_time DATETIME NOT NULL,
  event_type INT,
  user_id INT,
  payload STRING
) ENGINE=OLAP
DUPLICATE KEY(event_time, event_type)
PARTITION BY RANGE(event_time) ()
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES (
  'dynamic_partition' = 'true',
  'dynamic_partition.time_unit' = 'DAY',
  'dynamic_partition.start' = '-7',
  'dynamic_partition.end' = '3',
  'dynamic_partition.prefix' = 'p',
  'dynamic_partition.buckets' = '10',
  'dynamic_partition.replication_num' = '3',
  'dynamic_partition.create_history_partition' = 'true'
);

3. 参数说明: | 参数 | 说明 | 示例值 | |------|------|--------| | time_unit | 分区粒度 | DAY/WEEK/MONTH/HOUR | | start | 保留的历史分区数(-7=保留7天前至今)| -7 | | end | 预创建的未来分区数 | 3(提前建3天)| | prefix | 分区名前缀 | p(如p20250525)| | buckets | 分桶数 | 10 | | replication_num | 副本数 | 3 | | create_history_partition | 是否创建历史分区 | true |

4. 自动分桶

PROPERTIES ('dynamic_partition.buckets' = 'auto')
  • Doris根据分区数据量自动计算最优分桶数
  • 避免手动估算分桶数的难题

5. 运维优势

  • 无需每天手动创建明天分区
  • 自动清理7天前的历史分区
  • 配合Routine Load实现全自动实时入仓

6. 查看与修改

-- 查看动态分区状态
SHOW DYNAMIC PARTITION TABLES;
-- 修改
ALTER TABLE events SET ('dynamic_partition.start' = '-30');