Redshiftの制約と解決案をまとめてみました。
1. データ分散・配置関連
制約 |
解消案 |
ファクトテーブルには1つのディストリビューションキーしか設定できない。 |
ディストリビューションキーはデータをRedshiftのノード間でどう分散するかを決めるものです。結合頻度が高いディメンジョンテーブル(顧客情報、製品情報など)のキーを使うと効率的にクエリが実行されます。 |
ディストリビューションが不均等になる可能性がある(例: 季節変動によるデータ集中)。 |
データの分布が偏ると、特定のノードだけに負荷が集中して遅くなります。値の種類(カーディナリティ)が多いカラムをディストリビューションキーにすると偏りを防ぎやすくなります。 |
フィルタ期間が狭い場合、クエリ負荷が一部のノードに集中する。 |
一定期間だけのデータを絞り込むクエリが多いと、該当するノードに処理が集中します。そこで、フィルタ後に均等に分散されるカラムを使うのが効果的です。 |
ディメンジョンテーブルがファクトテーブルと同じノードに配置されない場合、クエリ性能が低下する。 |
ディメンジョンテーブルを全ノードに複製(ALLディストリビューション)すると、結合が高速になりますが、ストレージを多く消費するため、頻繁に結合される小さなテーブルで使うと良いです。 |
2. データ管理・性能関連
制約 |
解消案 |
ALLディストリビューションはストレージとロード時間を増加させる。 |
複製するテーブルが大きいと、ストレージが逼迫しロード時間が長くなります。小規模なテーブルにのみ適用してください。 |
データが大量でクエリ計画が最適化されない場合がある。 |
ソートキーを指定すると、クエリは特定の範囲外のデータをスキップでき、処理が高速化されます。特に日付やIDのようなカラムが効果的です。 |
圧縮方式が適切でない場合、クエリ性能が低下する。 |
Redshiftの自動圧縮機能を使えば、最適な圧縮形式が適用され、データサイズの縮小とクエリ高速化が期待できます。 |
3. クエリ最適化関連
制約 |
解消案 |
クエリが大規模な結合でハッシュ結合により遅くなることがある。 |
結合カラムをソートキーとディストリビューションキーに指定すると、クエリはハッシュ結合よりも高速なソートマージ結合を選択します。 |
主キーや外部キーの制約が不足している場合、クエリ最適化が不十分となる可能性がある。 |
Redshiftは主キー・外部キー制約を情報として使用してクエリを最適化します。これらを設定することで、効率的なクエリ計画をサポートできます。 |
カラムサイズを最大値に設定するとストレージ効率が低下する。 |
必要以上に大きなカラムサイズはストレージを無駄に消費します。使用するデータに合ったカラムサイズを設定しましょう。 |
参考 以下で用語をまとめています。