ALTER TABLE REPLACE
デスクリプション
2つのTableのアトミック置換。この操作はOLAPTableにのみ適用されます。
ALTER TABLE [db.]tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')];
Table tbl1 をTable tbl2 で置き換えます。
swap パラメータが true の場合、置き換え後に tbl1 という名前のTableのデータは、元の tbl2 という名前のTableのデータになります。tbl2 という名前のTableのデータは、元の tbl1 Tableのデータになります。つまり、2つのTableのデータが交換されます。
swap パラメータが false の場合、置き換え後に tbl1 Tableのデータは tbl2 Tableのデータになります。tbl2 という名前のTableは削除されます。
原理
replace table機能は、実際には以下の一連の操作をアトミックな操作に変換します。
TableAをTableBで置き換えたい場合で、swap が true の場合は、以下を実行します:
- TableBをTableAとしてリネームします。
- TableAをTableBとしてリネームします。
swap が false の場合は、以下のように実行します:
- TableAを削除します。
- TableBをTableAとしてリネームします。
注意
- デフォルトの
swapパラメータはtrueです。つまり、Table置き換え操作は2つのTable間でのデータ交換と同等です。 swapパラメータを false に設定した場合、置き換えられるTable(TableA)は削除され、復元できません。- 置き換え操作は2つのOLAPTable間でのみ実行でき、2つのTableのTable構造が一致しているかどうかはチェックしません。
- 元の権限設定は変更されません。権限チェックはTable名に基づいて行われるためです。
例
- Tableを削除せずに
tbl1とtbl2をアトミックに交換します(注意:削除する場合、実際には tbl1 を削除して tbl2 を tbl1 にリネームします。)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2;
または
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'true');
tbl1とtbl2をアトミックスワップし、tbl2Tableを削除する(tbl1と元のtbl2のデータを保持)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'false');
キーワード
ALTER, TABLE, REPLACE, ALTER TABLE
ベストプラクティス
- アトミックオーバーレイ書き込み操作
場合によっては、ユーザーは特定のTableのデータを書き換えたいが、データを最初に削除してからインポートすると、その間の期間中はデータを閲覧できなくなります。この場合、ユーザーはまずCREATE TABLE LIKE文を使用して同じ構造の新しいTableを作成し、新しいデータを新しいTableにインポートし、置換操作を使用して古いTableをアトミックに置き換えることで目標を達成できます。パーティションレベルでのアトミック上書き書き込み操作については、temp partitionドキュメントを参照してください。