COPY コマンドを使用して Amazon Redshift の新しいテーブルにデータをロードしようとしました。COMPUPDATE OFF パラメータも追加しました。COPY ANALYZE がまだ実行されているのはなぜですか?
簡単な説明
Amazon Redshift でテーブルを作成する前に、テーブルのディストリビューションスタイルを選択します。テーブルがディストリビューションスタイルを指定しない場合、デフォルトで AUTO ディストリビューションになります。その後、Amazon Redshift の AUTO ディストリビューション機能は COPY ANALYZE プロセスを使用して、テーブルで EVEN または ALL ディストリビューションを使用するかどうかを判断します。
注: COMPUPDATE OFF パラメータは、引き続き AUTO ディストリビューションスタイルを使用するテーブルで COPY ANALYZE を実行します。STATUPDATE OFF パラメータは COPY ANALYZE コマンドを無効にしたり、抑制したりしません。
解決方法
1. SHOW TABLE を実行して、テーブルの現在の分散スタイルを確認します。
SHOW TABLE [schema_name.]table_name
注: デフォルトでは、CREATE TABLE ステートメントでディストリビューションスタイルが指定されていない場合、Amazon Redshift は AUTO ディストリビューションを適用します。
2. AUTO ディストリビューションがオンになっている場合は、定義されたディストリビューションスタイルを使用してテーブルを作成します。ディストリビューションスタイルを指定すると、COPY ANALYZE が実行されなくなります。
次の例では、EVEN ディストリビューションスタイルを指定します。
create table rs_example_test (id int)diststyle even;
ディストリビューションスタイルの詳細については、「データディストリビューションスタイルの操作」を参照してください。
3. COPY コマンドを使用してデータをテーブルにロードし、STATUPDATE OFF パラメータを追加します。
注: 個別の INSERT ステートメントを使用する代わりに、COPY コマンドを使用して大量のデータをロードすることをお勧めします。これにより、パフォーマンスの問題が発生するリスクを最小限に抑えることができます。
4. SVL_STATEMENTTEXT システムテーブルに対してクエリを実行し、セッションに関連するプロセス ID (PID) でフィルタリングします。
select userid, xid, pid, trim(label) as label, starttime, endtime, sequence, trim(type) as type, left(text,60) text from svl_statementtext where pid = 26815 order by xid, starttime, sequence;
上記の構文は、COPY ANALYZE が COPY トランザクションの一部として実行されたかどうかをチェックします。
出力は次のようになります。
userid xid pid label starttime endtime sequence type text
100 78915 26815 default 2019-03-19 14:06:19 2019-03-19 14:06:21 0 QUERY copy rs_test3 from 's3://xxxxx-rs-log/AWSLogs/rs_test2.csv'\
100 78915 26815 default 2019-03-19 14:06:21 2019-03-19 14:06:21 0 UTILITY COMMIT
これにより、COPY ANALYZE が COPY トランザクションの一部として実行されなくなったことが確認されます。
関連情報
ステージングテーブルを使用したマージ (アップサート) の実行