ALTER TABLE REPLACE
説明
2つのテーブルのアトミック置換。この操作はOLAPテーブルにのみ適用されます。
ALTER TABLE [db.]tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')];
tbl1テーブルをtbl2テーブルと置き換えます。
swapパラメータがtrueの場合、置き換え後にtbl1という名前のテーブル内のデータは、元のtbl2という名前のテーブル内のデータになります。tbl2という名前のテーブル内のデータは、元のtbl1テーブル内のデータになります。つまり、2つのテーブルのデータが交換されます。
swapパラメータがfalseの場合、置き換え後にtbl1テーブル内のデータはtbl2テーブル内のデータになります。tbl2という名前のテーブルは削除されます。
原理
replace table機能は、実際には以下の一連の操作をアトミック操作に変換します。
テーブルAをテーブルBと置き換え、swapがtrueの場合、以下を実行します:
- テーブルBをテーブルAとして名前変更します。
- テーブルAをテーブルBとして名前変更します。
swapがfalseの場合、以下を実行します:
- テーブルAを削除します。
- テーブルBをテーブルAとして名前変更します。
注意事項
- デフォルトの
swapパラメータはtrueです。つまり、テーブル置き換え操作は2つのテーブル間でのデータ交換と同等です。 swapパラメータがfalseに設定されている場合、置き換えられるテーブル(テーブルA)は削除され、復元することはできません。- 置き換え操作は2つのOLAPテーブル間でのみ実行でき、2つのテーブルのテーブル構造が一致しているかどうかはチェックしません。
- 元の権限設定は変更されません。権限チェックはテーブル名に基づいて行われるためです。
例
- テーブルを削除せずに
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文を使用して同じ構造の新しいテーブルを作成し、新しいデータを新しいテーブルにインポートし、置換操作を使用して古いテーブルをアトミックに置き換えて目標を達成できます。パーティションレベルでのアトミック上書き書き込み操作については、temp partition documentationを参照してください。