に最終更新
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 の場合、以下の操作を行います。
- テーブル B の名前をテーブル A に変更します。
- テーブル A の名前をテーブル B に変更します。
swap が false の場合、以下の操作を行います。
- テーブル A を削除します。
- テーブル B の名前をテーブル A に変更します。
注意事項
swapパラメータのデフォルト値はtrueです。つまり、テーブル置き換え操作は、二つのテーブルのデータを入れ替える操作に相当します。swapパラメータを false に設定すると、置き換えられるテーブル(テーブル A)は削除され、復元できません。- 置き換え操作は二つの OLAP テーブル間でのみ実行できます。二つのテーブルの構造が一致しているかどうかはチェックされません。
- 権限はテーブル名に基づいてチェックされるため、元の権限設定は変更されません。
例
- テーブルを削除せずに、
tbl1とtbl2をアトミックに入れ替える(注: 削除する場合、実際には tbl1 を削除し、tbl2 を tbl1 にリネームします。)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2;
または
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'true');
tbl1をtbl2でアトミックに置き換え、tbl2テーブルを削除する(tbl1という名前と元のtbl2のデータを保持する)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'false');
キーワード
ALTER, TABLE, REPLACE, ALTER TABLE
ベストプラクティス
- アトミックな上書き操作
テーブルのデータを書き換えたい場合、先にデータを削除してからインポートすると、その間はデータを参照できません。この場合、まず CREATE TABLE LIKE 文で同じ構造の新しいテーブルを作成し、新しいデータをそのテーブルにインポートします。その後、置き換え操作で古いテーブルをアトミックに置き換えます。パーティション単位でのアトミックな上書き操作については、一時パーティションのドキュメントを参照してください。