

 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/)を参照してください。

# ANALYZE
<a name="r_ANALYZE"></a>

クエリプランナーで使用するテーブル統計を更新します。

## 必要な権限
<a name="r_ANALYZE-privileges"></a>

ANALYZE に必要な権限を以下に示します。
+ スーパーユーザー
+ ANALYZE の権限を持つユーザー
+ 関連付けの所有者
+ テーブルの共有先であるデータベース所有者

## 構文
<a name="r_ANALYZE-synopsis"></a>

```
ANALYZE [ VERBOSE ]
[ [ table_name [ ( column_name [, ...] ) ] ]
[ PREDICATE COLUMNS | ALL  COLUMNS ]
```

## パラメータ
<a name="r_ANALYZE-parameters"></a>

VERBOSE   
ANALYZE オペレーションに関する進捗情報メッセージを返す句。このオプションは、テーブルを指定しないときに役立ちます。

 *table\_name*   
一時テーブルを含む、特定のテーブルを分析できます。テーブルをそのスキーマ名で修飾することができます。また、table\_name を指定して単一のテーブルを分析することもできます。1 つの ANALYZE *table\_name* ステートメントで複数の *table\_name* を指定することはできません。*table\_name* 値を指定しなかった場合、システムカタログの永続テーブルを含め、現在接続されているデータベースのすべてのテーブルが分析されます。最後の ANALYZE 以降に変更された行の割合が分析のしきい値よりも低い場合、Amazon Redshift はテーブルの分析をスキップします。詳細については、「[分析のしきい値](#r_ANALYZE-threshold)」を参照してください。  
Amazon Redshift のシステムテーブル (STL テーブルと STV テーブル) を分析する必要はありません。

 *column\_name*   
*table\_name* を指定する場合、テーブルの 1 つ以上の列を指定することもできます (括弧内に列をカンマ区切りリストとして指定します)。列リストが指定された場合、リストされている列のみが分析されます。

 PREDICATE COLUMNS \| ALL COLUMNS   
ANALYZE に述語列のみを含めるかどうかを示す句。PREDICATE COLUMNS を指定すると、前のクエリで述語として使用されている列、または述語として使用される可能性が高い列のみが分析されます。すべての行を分析するには、ALL COLUMNS を指定します。デフォルトは ALL COLUMNS です。  
次のいずれかが当てはまる場合、列は述語列のセットに含まれます。  
+ この列は、フィルタ、結合条件、または GROUP BY 句の一部としてクエリで使用されています。
+ 列が分散キーです。
+ 列はソートキーの一部です。
例えば、テーブルがまだ照会されていないなどの理由で列が述語列としてマークされていない場合は、PREDICATE COLUMNS が指定されていてもすべての列が分析されます。この場合、Amazon Redshift は「{{table-name}} の述語列が見つかりません」 「すべての列を分析しています」などのメッセージで応答することがあります。述語の列の詳細については、[テーブルを分析する](t_Analyzing_tables.md)を参照してください。

## 使用に関する注意事項
<a name="r_ANALYZE-usage-notes"></a>

Amazon Redshift では、以下のコマンドを使用して作成したテーブルで自動的に ANALYZE を実行します。
+ CREATE TABLE AS
+ CREATE TEMP TABLE AS 
+ SELECT INTO

 外部テーブルを分析することはできません。

最初に作成したとき、これらのテーブルに ANALYZE コマンドを実行する必要はありません。変更する場合は、他のテーブルと同じように分析する必要があります。

### 分析のしきい値
<a name="r_ANALYZE-threshold"></a>

処理時間を短縮し、システム全体のパフォーマンスを向上させるために、最後の ANALYZE コマンドの実行以降に変更された行の割合が、[analyze\_threshold\_percent](r_analyze_threshold_percent.md) パラメータで指定された分析のしきい値よりも低い場合、Amazon Redshift はテーブルの分析をスキップします。デフォルトでは、`analyze_threshold_percent`は 10 です。現在のセッションの `analyze_threshold_percent` を変更するには、[SET](r_SET.md)コマンドを実行します。次の例では、`analyze_threshold_percent`を 20 パーセントに変更します。

```
set analyze_threshold_percent to 20;
```

数行のみを変更した場合にテーブルを分析するには、`analyze_threshold_percent`に任意の小さい数字を設定します。たとえば、`analyze_threshold_percent`を 0.01 に設定すると、少なくとも 10,000 行が変更された場合は 100,000,000 行のテーブルをスキップしません。

```
set analyze_threshold_percent to 0.01;
```

ANALYZE でテーブルがスキップされるのは、分析のしきい値を満たしていないためです。Amazon Redshift は次のメッセージを返します。

```
ANALYZE SKIP
```

行が変更されていない場合でもすべてのテーブルを分析するには、`analyze_threshold_percent`を 0 に設定します。

ANALYZE オペレーションの結果を表示するには、[STL\_ANALYZE](r_STL_ANALYZE.md)システムテーブルに対してクエリを実行します。

テーブル分析の詳細については、「[テーブルを分析する](t_Analyzing_tables.md)」を参照してください。

## 例
<a name="r_ANALYZE-examples"></a>

TICKIT データベースのすべてのテーブルを分析し、進捗情報を返します。

```
analyze verbose;
```

LISTING テーブルのみを分析します。

```
analyze listing;
```

VENUE テーブルの VENUEID 列と VENUENAME 列を分析します。

```
analyze venue(venueid, venuename);
```

VENUE テーブルの述語の列のみを分析します。

```
analyze venue predicate columns;
```