| --- |
| { |
| "title": "Atomicテーブルの置換", |
| "language": "ja", |
| "description": "DorisはOLAPテーブルにのみ適用可能な、2つのテーブル間でのアトミックな置換操作をサポートしています。" |
| } |
| --- |
| Dorisは2つのテーブル間でのアトミック置換操作をサポートしており、OLAPテーブルにのみ適用可能です。 |
| |
| ## 適用可能なシナリオ |
| |
| ユーザーがテーブルデータを書き換える必要がある場合がありますが、データを削除してからインポートすると、利用できない期間が発生してしまいます。このような場合、ユーザーは`CREATE TABLE LIKE`文を使用して同じ構造の新しいテーブルを作成し、新しいデータを新しいテーブルにインポートしてから、古いテーブルのアトミック置換を実行できます。パーティションレベルのアトミック上書き操作については、[temporary partition documentation](../delete/table-temp-partition)を参照してください。 |
| |
| ## 構文 |
| |
| ```Plain |
| 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で置き換えられ、`swap` が `true` であると仮定すると、操作は以下のようになります: |
| |
| 1. テーブルBをテーブルAにリネームする。 |
| 2. テーブルAをテーブルBにリネームする。 |
| |
| `swap` が `false` の場合、操作は以下のようになります: |
| |
| 1. テーブルAを削除する。 |
| 2. テーブルBをテーブルAにリネームする。 |
| |
| ## 注意事項 |
| |
| - `swap` パラメータが `false` の場合、置き換えられるテーブル(テーブルA)は削除され、復旧できません。 |
| - 置き換え操作は2つのOLAPテーブル間でのみ実行でき、テーブル構造の一貫性はチェックされません。 |
| - 置き換え操作は元の権限設定を変更しません。権限チェックはテーブル名に基づいて行われるためです。 |