メインコンテンツまでスキップ
に最終更新

テーブルのアトミックな置換

Doris は、二つの OLAP テーブル間でのアトミックな置換をサポートしています。一つの ALTER TABLE 文でテーブル名の入れ替え、またはテーブル全体の置換を実行できます。従来の「先に削除し、その後にロードする」方法で生じる、クエリからデータを参照できない期間を回避できます。

適用シナリオ​

途中でデータが空の状態を見せずにテーブル内の全データを書き換える必要がある場合は、アトミックなテーブル置換を使用します。

シナリオ推奨する方法
テーブル全体の書き換え(オフラインでの全件再投入など)CREATE TABLE LIKE で新しいテーブルを作成し、新しいデータをロードしてから、古いテーブルをアトミックに置換します
特定のパーティションだけを置換する一時パーティションを参照してください
ロールバックのために古いテーブルを残すswap = true を使用します。古いテーブルのデータは新しいテーブル名の下に移動します
置換後に古いテーブルを残す必要がないswap = false を使用します。古いテーブルは直接削除されます

操作手順​

「古いテーブル tbl1 を新しいデータで置き換える」場合を例に、標準的な手順を示します。

  1. 古いテーブルのスキーマを基に新しいテーブルを作成します。

    CREATE TABLE tbl2 LIKE tbl1;
  2. 新しいテーブル tbl2 に新しいデータをロードします。

  3. アトミックな置換を実行します。

    ALTER TABLE tbl1 REPLACE WITH TABLE tbl2
    [PROPERTIES('swap' = 'true')];
  4. swap パラメータに応じて結果を確認します(詳細は以下を参照)。

構文​

ALTER TABLE [db.]tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')];

この文はテーブル tbl1 をテーブル tbl2 で置換します。swap パラメータは、置換後に古いテーブルをどのように扱うかを制御します。

swap パラメータの動作​

swap の値置換後の tbl1 のデータ置換後の tbl2 の状態主な用途
true(デフォルト)置換前の tbl2 のデータ残り、置換前の tbl1 のデータを保持します(二つのテーブルが入れ替わります)ロールバックや比較のために古いデータを残す
false置換前の tbl2 のデータ削除され、復元できません新しいデータだけが必要で、古いテーブルを破棄できる場合

仕組み​

アトミックな置換は、複数の DDL 手順を一つのアトミックな操作にまとめます。外部からは瞬時に切り替わったように見えます。

  • swap = true の場合:

    1. テーブル B の名前をテーブル A に変更します。
    2. テーブル A の名前をテーブル B に変更します。
  • swap = false の場合:

    1. テーブル A を削除します。
    2. テーブル B の名前をテーブル A に変更します。

これらの手順はメタデータ層でアトミックなトランザクションとして実行されるため、外部からのクエリには途中の状態が見えません。

注意事項​

  • 置換がサポートされるのは、二つの OLAP テーブル間だけです。ほかの種類のテーブルはサポートされません。
  • システムは、二つのテーブルのスキーマが同一かどうかを検証しません。スキーマの互換性は利用者が確認する必要があります。
  • swap = false の場合、置換された古いテーブルは直接削除され、復元できません。このオプションは慎重に使用してください。
  • 権限はテーブル名に基づいてチェックされるため、置換によって権限設定は変わりません。置換後の新しいテーブルには、元のテーブル名に関連付けられた権限が自動的に適用されます。

よくある質問​

Q1: 置換の実行中に、すでに実行されているクエリは影響を受けますか?

A: 置換はメタデータ層でのアトミックな操作です。すでに発行されたクエリは元のテーブルのデータを対象として完了し、新しいクエリは置換後のデータを参照します。

Q2: カラム、インデックス、パーティションが異なる二つのテーブルを置換できますか?

A: はい。システムはスキーマの整合性を検証しませんが、スキーマの互換性を保つ必要があります。互換性がないと、カラム名や型の変更によって後続のクエリやアプリケーションが失敗する可能性があります。

Q3: 置換後に元のテーブルのデータを復元できますか?

A: swap = true の場合、元のテーブルのデータは元の tbl2 という名前の下に保持され、復元できます。swap = false の場合、元のテーブルは削除されており、復元できません。

Q4: アトミックな置換をパーティションに使用できますか?

A: はい。パーティション単位でアトミックに上書きするには、一時パーティション機能を使用してください。

  • 一時パーティション:パーティション単位のアトミックな上書き
  • CREATE TABLE LIKE:既存テーブルのスキーマを基に新しいテーブルをすばやく作成します