メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

ディープコピーを実行する

ディープコピーでは、テーブルを自動的にソートする一括挿入を利用してテーブルを再作成し、データを入力します。テーブルにソートされていない大規模なリージョンがある場合、ディープコピーの方がバキューム処理より高速です。欠点としては、ディープコピー処理中は同時更新を実行できません。バキューム処理では実行できます。

4 つの方法の 1 つを選択し、元のテーブルのコピーを作成できます:

  • 元のテーブル DDL を使用します。

    CREATE TABLE DDL が利用できる場合、これが最も速く推奨の方法になります。新しいテーブルを作成する場合は、プライマリキーと外部キーを含むすべてのテーブルと列の属性を指定できます。

    注記

    元の DDL が利用できない場合、v_generate_tbl_ddl というスクリプトを実行して DDL を再作成できる可能性があります。Amazon Web Services - Labs Github リポジトリの一部である amazon-redshift-utils からスクリプトをダウンロードできます。

  • CREATE TABLE LIKE を使用します。

    元の DDL が利用できない場合、CREATE TABLE LIKE を使用して元のテーブルを再作成できます。新しいテーブルは親テーブルのエンコーディング、分散キー、ソートキー、Not Null 属性を継承します。新しいテーブルは親テーブルのプライマリキーと外部キーの属性を継承しませんが、ALTER TABLE を使ってそれらを追加できます。

  • 一時テーブルを作成し、元のテーブルの全データを削除します。

    親テーブルのプライマリキーおよび外部キーの属性を維持する場合、または親テーブルに依存関係がある場合、CTAS を使用して一時テーブルを作成し、元のテーブルの全データを削除してから、一時テーブルのデータを入力します。

    一時テーブルを使用すると、永続テーブルを使用する場合と比較して著しくパフォーマンスが向上しますが、データを失うリスクがあります。一時テーブルは、作成したセッションの終了時に自動的に削除されます。TRUNCATE を使うと、トランザクションブロック内にある場合でも、即座にコミットされます。TRUNCATE が成功しても後続の INSERT が完了する前にセッションが終了すると、データが失われます。データ損失を許容できない場合は、永続テーブルを使用します。

To perform a deep copy using the original table DDL

  1. (Optional) Recreate the table DDL by running a script called v_generate_tbl_ddl.

  2. Create a copy of the table using the original CREATE TABLE DDL.

  3. Use an INSERT INTO … SELECT statement to populate the copy with data from the original table.

  4. Drop the original table.

  5. Use an ALTER TABLE statement to rename the copy to the original table name.

次の例では、「SALESCOPY」という名前の SALES の複製を利用し、SALES テーブルにディープコピーが実行されます。

Copy
create table salescopy ( … ); insert into salescopy (select * from sales); drop table sales; alter table salescopy rename to sales;

To perform a deep copy using CREATE TABLE LIKE

  1. Create a new table using CREATE TABLE LIKE.

  2. Use an INSERT INTO … SELECT statement to copy the rows from the current table to the new table.

  3. Drop the current table.

  4. Use an ALTER TABLE statement to rename the new table to the original table name.

次の例では、CREATE TABLE LIKE を使用して SALES テーブルにディープコピーを実行します。

Copy
create table likesales (like sales); insert into likesales (select * from sales); drop table sales; alter table likesales rename to sales;

To perform a deep copy by creating a temporary table and truncating the original table

  1. Use CREATE TABLE AS to create a temporary table with the rows from the original table.

  2. Truncate the current table.

  3. Use an INSERT INTO … SELECT statement to copy the rows from the temporary table to the original table.

  4. Drop the temporary table.

次の例では、一時テーブルを作成し、元のテーブルの全データを削除することによって、SALES テーブルにディープコピーが実行されます。

Copy
create temp table salestemp as select * from sales; truncate sales; insert into sales (select * from salestemp); drop table salestemp;