blob: f2cb981caf6d5173a2ea605a0182bb17e2f56465 [file] [view]
---
{
"title": "Atomicテーブルの置換",
"language": "ja",
"description": "DorisはOLAPテーブルにのみ適用可能な、2つのテーブル間でのアトミックな置換操作をサポートしています。"
}
---
Doris2つのテーブル間でのアトミック置換操作をサポートしており、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テーブル間でのみ実行でき、テーブル構造の一貫性はチェックされません。
- 置き換え操作は元の権限設定を変更しません。権限チェックはテーブル名に基づいて行われるためです。