① 标题党#
主标题:一张表存千亿行?Doris 的分区分桶能让强迫症狂喜
备选:别人建表是写 SQL,你建表是给数据"分房"?
② 开场钩子#
业务表动辄百亿行,可 Doris 查起来还是快。为什么呢?因为它建表时——不是把数据一股脑堆一块,而是先给你分了房、再排了队。
③ 主角特性:Range 分区 + Hash 分桶#
- Range 分区:按时间/值域切大块(如按天/月),查询
WHERE date=...直接跳过无关分区(分区裁剪)。 - Hash 分桶:分区内部再按某列哈希切成固定桶,让数据均匀分布到多个 BE,配合分布式并行扫描。
关键:分桶列选错,热点就会压垮单个 BE;选对,扫描天然并行。
④ 最小可复现#
CREATE TABLE events (
id BIGINT, ts DATETIME, city VARCHAR(16), ...
)
PARTITION BY RANGE(ts) (...); -- 按时间分区
DISTRIBUTED BY HASH(city) BUCKETS 16 -- 按城市分桶
PROPERTIES ("replication_num" = "3");sql⑤ 结论#
分区管”跳过”,分桶管”并行”。Doris 的建表,本质是让每一次查询天然走捷径。
⑥ 配图脚本#
分区=切蛋糕 / 分桶=Hash 漏斗 / 分区裁剪示意 / 不均匀热点 vs 均匀对比