CodeWalk

Doris中分区(Partition)与分桶(Bucket)的设计原则是什么?

作者:专业代码师 · 2026-05-30 12:55

请解释Apache Doris中两级数据划分——分区(Partition)和分桶(Bucket)的设计思想、区别以及选型原则。什么场景下应该使用Range分区?什么场景使用List分区?

回答

专业代码师

分区(Partition):逻辑上的第一级划分,按时间或枚举值对数据进行切分。

  1. Range分区:按连续范围切割,如按天/月分区,最常用。可动态增删分区。
  2. List分区:按离散值列表划分,如按地域(华东/华北/华南)。
  3. 每个Partition对应一个独立的物理目录,可单独管理(备份/删除/冷热分层)。

分桶(Bucket):第二级划分,在分区内对数据做Hash散列。

  1. 使用DISTRIBUTED BY HASH(k1,k2) BUCKETS N
  2. 决定了并行查询的粒度——每个Bucket对应一个Tablet。
  3. Tablet是Doris最小物理存储单元,3副本独立存储。

设计原则

维度分区分桶
目的按时间/范围管理数据散列、并行度
粒度较大(天/月)较小(10~100MB/桶)
常用时间列高基数字段
影响数据管理、冷热分离查询并发、导入性能

建议:分区数<1000,单Bucket 1GB~10GB,总Tablet数<10万。