メインコンテンツまでスキップ
バージョン: 4.x

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という名前のテーブルは削除されます。

理論

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

テーブルAをテーブルBで置き換え、swaptrueの場合は、以下を実行します:

  1. テーブルBをテーブルAとしてリネームします。
  2. テーブルAをテーブルBとしてリネームします。

swapfalseの場合は、以下を実行します:

  1. テーブルAを削除します。
  2. テーブルBをテーブルAとしてリネームします。

注意事項

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

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

または

ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'true');
  1. tbl1tbl2をアトミックにスワップし、tbl2テーブルを削除する(tbl1と元のtbl2のデータを保持する)
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'false');

キーワード

ALTER, TABLE, REPLACE, ALTER TABLE

ベストプラクティス

  1. アトミックオーバーレイ書き込み操作

場合によっては、ユーザーは特定のテーブルのデータを書き換えたいが、データを最初に削除してからインポートする場合、その間の期間中はデータを表示することができません。この場合、ユーザーはまずCREATE TABLE LIKE文を使用して同じ構造の新しいテーブルを作成し、新しいデータを新しいテーブルにインポートし、置換操作を使用して古いテーブルをアトミックに置換することで目標を達成できます。パーティションレベルでのアトミックオーバーライト書き込み操作については、temp partitionドキュメントを参照してください。