

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# 最適な分散スタイルの選択
<a name="c_best-practices-best-dist-key"></a>

クエリを実行すると、必要に応じて結合と集計を実行するために、クエリオプティマイザによって行がコンピューティングノードに再分散されます。テーブル分散スタイルの選択は、クエリを実行する前にデータを必要な場所に配置しておくことによって、再分散ステップの影響を最小限に抑えるために行われます。

**注記**  
自動テーブル最適化を使用する場合、テーブルのディストリビューションスタイルを選択する必要はありません。詳細については、「[自動テーブル最適化](t_Creating_tables.md)」を参照してください。

最良のアプローチのために、以下にいくつかの提案を示します。

1. ファクトテーブルと 1 つのディメンションテーブルをそれらの共通の列に基づいて分散させます。

   ファクトテーブルに指定できる分散キーは 1 つだけです。別のキーを使用して結合しているテーブルは、ファクトテーブルとコロケーションされません。結合の頻度と結合列のサイズに基づいてコロケーションする 1 つのディメンションを選択します。ディメンションテーブルのプライマリキーとそれに対応するファクトテーブルの外部キーをいずれも DISTKEY として指定します。

1. フィルタリングされたデータセットのサイズに基づいて最大ディメンションを選択します。

   結合で使用されている行のみが分散される必要があるため、テーブルのサイズではなく、フィルタリング後のデータセットのサイズを考慮します。

1. フィルタリングされた結果セットで高い濃度の行を選択します。

   日付列の販売テーブルを配信する場合、例えば、ほとんどの販売が季節的でなければ、おそらくほぼ均等なデータ分散を取得します。ただし、通常、範囲が制限された述語を使用して狭い日付期間をフィルタリングする場合は、フィルタリングされた行のほとんどはスライス限られたセットになり、クエリのワークロードもスキューされます。

1. ALL 分散を使用するように一部のディメンションテーブルを変更します。

   ファクトテーブルやその他の重要な結合テーブルとディメンションテーブルをコロケーションできない場合は、テーブル全体を全ノードに分散させることによってパフォーマンスを大幅に向上させることができます。ALL 分散を使用すると、ストレージ領域要件の増大、ロード時間の長期化、メンテナンス操作の増加を招くため、ALL 分散を選択する前にすべての要因を比較検討しておく必要があります。

Amazon Redshift が適切なディストリビューションスタイルを選択できるようにするには、ディストリビューションスタイルに `AUTO` を指定します。

ディストリビューションスタイルの選択の詳細については、[クエリ最適化のためのデータのディストリビューション](t_Distributing_data.md) を参照してください。