メインコンテンツまでスキップ
に最終更新

ALTER TABLE REPLACE

説明​

二つのテーブル間でアトミックな置き換えを行います。この操作は OLAP テーブルにのみ適用されます。

ALTER TABLE [db.]tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')];

tbl1 テーブルを tbl2 テーブルで置き換えます。

swap パラメータが true の場合、置き換え後、tbl1 という名前のテーブルには元の tbl2 テーブルのデータが入り、tbl2 という名前のテーブルには元の tbl1 テーブルのデータが入ります。つまり、二つのテーブルのデータが入れ替わります。

swap パラメータが false の場合、置き換え後、tbl1 テーブルには元の tbl2 テーブルのデータが入ります。tbl2 という名前のテーブルは削除されます。

仕組み​

テーブル置き換え機能は、実質的に以下の一連の操作をアトミックな操作にします。

テーブル A をテーブル B で置き換え、swap が true の場合、以下の操作を行います。

  1. テーブル B の名前をテーブル A に変更します。
  2. テーブル A の名前をテーブル B に変更します。

swap が false の場合、以下の操作を行います。

  1. テーブル A を削除します。
  2. テーブル B の名前をテーブル A に変更します。

注意事項​

  1. swap パラメータのデフォルト値は true です。つまり、テーブル置き換え操作は、二つのテーブルのデータを入れ替える操作に相当します。
  2. swap パラメータを false に設定すると、置き換えられるテーブル(テーブル A)は削除され、復元できません。
  3. 置き換え操作は二つの OLAP テーブル間でのみ実行できます。二つのテーブルの構造が一致しているかどうかはチェックされません。
  4. 権限はテーブル名に基づいてチェックされるため、元の権限設定は変更されません。

例​

  1. テーブルを削除せずに、tbl1 と tbl2 をアトミックに入れ替える(注: 削除する場合、実際には tbl1 を削除し、tbl2 を tbl1 にリネームします。)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2;

または

ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'true');
  1. tbl1 を tbl2 でアトミックに置き換え、tbl2 テーブルを削除する(tbl1 という名前と元の tbl2 のデータを保持する)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'false');

キーワード​

ALTER, TABLE, REPLACE, ALTER TABLE

ベストプラクティス​

  1. アトミックな上書き操作

テーブルのデータを書き換えたい場合、先にデータを削除してからインポートすると、その間はデータを参照できません。この場合、まず CREATE TABLE LIKE 文で同じ構造の新しいテーブルを作成し、新しいデータをそのテーブルにインポートします。その後、置き換え操作で古いテーブルをアトミックに置き換えます。パーティション単位でのアトミックな上書き操作については、一時パーティションのドキュメントを参照してください。