分桶
在 StarRocks 中选择 Hash Bucketing 和 Random Bucketing 的简明指南,包括它们的机制、权衡和推荐使用场景。
快速对比
| 方面 | Hash Bucketing | Random Bucketing |
|---|---|---|
| 示例 | DISTRIBUTED BY HASH(id) BUCKETS 16 | DISTRIBUTED BY RANDOM |
| 键声明 | 需要 HASH(col1, …) | 无 – 行按轮询分配 |
| 省略时的初始桶数 | 在 CREATE 时自动选择,然后固定 | 在 CREATE 时自动选择;如果设置了 bucket_size,可以增长 |
| tablet 拆分/缩减 | 手动 ALTER … BUCKETS | 自动拆分 ⇢ 仅增长 (≥ v3.2) |
| 抗倾斜性 | 取决于键的基数 | 高 – 设计上均匀 |
| 分桶裁剪 | ✅ (过滤、连接) | 🚫 (全量 tablet 扫描) |
| Colocate Join | ✅ | 🚫 |
| 本地聚合/Shuffle Join | ✅ | 🚫 |
| 支持的表模型 | 所有 | 仅 Duplicate Key(明细)表 |
Hash Bucketing
工作原理
通过对一个或多个列进行哈希,将行分配到 tablet。创建后,tablet 数量固定,除非手动更改。
要求
- 必须预先选择一个稳定、均匀、高基数的键。基数通常应是 BE 节点数量的 1000 倍,以防止哈希桶之间的数据倾斜。
- 初始选择合适的桶大小,理想情况下在 1 到 10 GB 之间。