バケット法
StarRocks におけるハッシュバケット法とランダムバケット法の選択に関する簡潔なガイドで、それぞれの仕組み、トレードオフ、および推奨される使用ケースを含みます。
クイックルック比較
項目 | ハッシュバケット法 | ランダムバケット法 |
---|---|---|
例 | DISTRIBUTED BY HASH(id) BUCKETS 16 | DISTRIBUTED BY RANDOM |
キー宣言 | 必須 HASH(col1, …) | なし – 行はラウンドロビンで割り当て |
省略時の初期バケット数 | CREATE 時に自動選択、その後固定 | CREATE 時に自動選択; bucket_size 設定で増加可能 |
タブレットの分割/縮小 | 手動 ALTER … BUCKETS | 自動分割 ⇢ 増加のみ (≥ v3.2) |
スキュー耐性 | キーのカーディナリティに依存 | 高 – 設計上均一 |
バケットプルーニング | ✅ (フィルター、ジョイン) | 🚫 (フルタブレットスキャン) |
コロケートジョイン | ✅ | 🚫 |
ローカル集約/バケットシャッフルジョイン | ✅ | 🚫 |
サポートされるテーブルタイプ | 全て | 重複キーテーブルのみ |
ハッシュバケット法
仕組み
行は1つ以上の列をハッシュすることでタブレットに割り当てられます。タブレット数は作成後に固定され、手動で変更しない限り変わりません。
要件
- 安定して均一で高カーディナリティのキーを事前に選ぶ必要があります。カーディナリティは通常、ハッシュバケット間のデータスキ ューを防ぐために BE ノード数の1000倍以上であるべきです。
- 初期バケットサイズを適切に選択し、理想的には1〜10 GBの範囲にします。
強み
- クエリの局所性 – 選択的なフィルターとジョインが少ないタブレットに触れる。
- コロケートジョイン – ファクト/ディムテーブルが高速ジョインのためにハッシュキーを共有できる。
- 予測可能なレイアウト – 同じキーを持つ行は常に一緒に配置される。
- ローカル集約とバケットシャッフルジョイン – パーティション間で同一のハッシュレイアウトがローカル集約を可能にし、大規模ジョインのデータシャッフルコストを削減。
弱み
- データ分布が偏るとホットタブレットに脆弱。
- タブレット数は静的で、スケーリングにはメンテナンス DDL が必要。
- タブレットが不十分だとデータ取り込み、データコンパクション、クエリ実行の並行性に悪影響を及ぼす可能性がある。
- タブレットを過剰に使用するとメタデータのフットプリントが拡大する。