パーティショニング
StarRocks での高速分析は、クエリパターンに合ったテーブルレイアウトから始まります。このガイドは、実践的な経験を明確なルールに凝縮し、パーティショニングを支援します。これにより、以下のことが可能になります。
- データのスキャンを減らす:積極的なパーティションプルーニングを通じて
- ライフサイクルタスクを管理する(TTL、GDPR 削除、階層化): メタデータのみの操作で
- スムーズにスケールする:テナント数、データ量、または保持期間が増加するにつれて
- 制御された書き込み増幅:新しいデータ は「ホット」パーティションに着地し、Compaction は履歴パーティションで行われます
新しいテーブルをモデル化する際や古いテーブルをリファクタリングする際には、このアドバイスを参考にしてください。各セクションでは、目的に基づいた基準、設計のヒューリスティクス、および運用上のガードレールを提供し、コストのかかる再パーティショニングを回避します。
パーティショニングとバケッティングの違い
パフォーマンスの高い StarRocks テーブルを設計する際には、パーティショニングとバケッティングの違いを理解することが重要です。どちらも大規模なデータセットを管理するのに役立ちますが、異なる目的を持っています。
- パーティショニングは、クエリ時にパーティションプルーニングを使用して StarRocks がデータのブロック全体をスキップできるようにし、古いデータやテナント固有のデータを削除するなどのメタデータのみのライフサイクル操作を可能にします。
- バケッティングは、データを tablets に分散させてクエリ実行を並列化し、特にハッシュ関数と組み合わせた場合に負荷を均等にします。
| 側面 | パーティショニング | バケッティング (ハッシュ/ランダム) |
|---|---|---|
| 主な目的 | 粗粒度のデータプルーニングとライフサイクル管理 (TTL、アーカイブ)。 | 各パーティション内での細粒度の並行性とデータのローカル性。 |
| プランナーの可視性 | パーティションは catalog オブジェクトであり、FE は述語を使用してそれらをスキップできます。 | 等価述語のみがバケットプルーニングをサポートします。 |
| ライフサイクル操作 | DROP PARTITION はメタデータのみで、GDPR 削除や月次ロールオフに最適です。 | バケットは削除できません; ALTER TABLE … MODIFY DISTRIBUTED BY でのみ変更されます。 |
| 典型的な数 | テーブルごとに 10^2–10^4(日、週、テナント)。 | パーティションごとに 10–120; StarRocks BUCKETS xxx がこれを調整します。 |
| スキュー処理 | パーティションをマージまたは分割します。複合/ハイブリッドスキームを検討します。 | バケット数を増やし、複合キーでハッシュし、「クジラ」を分離するか、ランダムバケット法を使用します。 |
| 注意点 | >100 k パーティションは FE に大きなメモリフットプリントをもたらす可能性があります。 | >200 k tablets per BE; 10 GB を超える tablets は Compaction の問題に直面する可能性があります。 |
いつパーティショニングすべきか?
| テーブルタイプ | パーティションを使用するか? | 典型的なキー |
|---|---|---|
| ファクト / イベントストリーム | はい | date_trunc('day', event_time) |
| 巨大なディメンション(数十億行) | 場合による | 時間またはビジネスキーの変更日 |
| 小さなディメンション / ルックアップ | いいえ | ハッシュ分散に依存 |
パーティションキーの選択
- 時間優先のデフォルト–クエリの 80% に時間フィルターが含まれる場合、
date_trunc('day', dt)を先頭にします。 - テナントの分離–テナント単位でデータを管理する必要がある場合、
tenant_idをキーに追加します。 - 保持の整合性–削除予定の列をキーに含めます。
- 複合キー:
PARTITION BY tenant_id, date_trunc('day', dt)は完全にプルーニングしますが、#tenants × #daysのパーティションを作成します。合計約 100 k 以下に抑えないと、FE メモリと BE Compaction に影響します。