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

削除操作の概要

Apache Doris には、条件付き削除、パーティション単位の削除、テーブル全体のデータ削除、主キーによる一括削除、アトミックな上書きなど、さまざまな用途に対応する削除方法があります。このページでは、利用シーンに応じて適切な方法を選べるように説明します。

方法の選び方​

利用シーンに応じて、次の削除方法を選択してください。

利用シーン推奨方法対象モデル特徴
条件を指定してデータの一部を削除するDELETE 文すべてのテーブルモデル汎用的で柔軟
期限切れのパーティションを削除する(例:直近 7 日分だけを残す)パーティション削除(TRUNCATE)パーティション分割されたテーブルメタデータのみを変更するため、最も効率的
スキーマを維持したままテーブル全体を空にするテーブル全体の削除(TRUNCATE)すべてのテーブルモデルデータをすばやく初期化
大量の主キーを一括削除する(CDC 同期など)削除フラグ(Delete Sign)Unique Key モデル更新によって一括削除を実現
クエリを中断せずにパーティションデータを書き換える一時パーティションによるアトミックな置換パーティション分割されたテーブルアトミックに上書きし、クエリできない期間を防ぐ

削除方法の詳細​

1. DELETE 文:条件付き削除​

条件を指定してデータの一部を削除する一般的な用途に適しており、すべてのテーブルモデルに対応します。

構文:

DELETE FROM table_name WHERE condition;

適用時の注意点:

  • 日常的な削除のほとんどに対応できます。
  • 一括削除やパーティション全体の削除では、以下の方法より効率が低くなります。

詳しい使い方は、DELETE 操作を参照してください。

2. パーティション削除:期限切れデータの効率的な整理​

Doris では、日付ごとにパーティションを分けてデータを管理するのが一般的です。直近の期間のデータだけを残す場合(例:直近 7 日分)は、パーティション削除(パーティションの TRUNCATE)を推奨します。

構文:

TRUNCATE TABLE tbl PARTITION(p1, p2);

利点:

  • パーティションのメタデータのみを変更し、データのスキャンは不要です。
  • 期限切れのパーティションを整理するためのベストプラクティスです。

詳しい使い方は、TRUNCATE 操作を参照してください。

3. テーブル全体の削除:テーブルをすばやく空にする​

オフライン分析のデータを再作成する場合など、スキーマを維持したままテーブル全体をすばやく空にする用途に適しています。

構文:

TRUNCATE TABLE table_name;

詳しい使い方は、TRUNCATE 操作を参照してください。

4. 削除フラグ:主キーの一括削除​

データの削除は、データ更新の特殊な形と見なすことができます。更新に対応する主キーモデル(Unique Key)では、削除フラグを使い、更新書き込みによってデータを削除できます。

代表的な利用シーン:

  • CDC(Change Data Capture)によるデータ同期:DELETE 操作の binlog に削除フラグを付けて Doris に書き込み、対応する主キーのデータを削除します。

利点と制約:

  • 主キーによる一括削除に対応し、DELETE 文より効率的です。
  • 高度な機能であり、使用方法は比較的複雑です。

詳しい使い方は、一括削除を参照してください。

5. 一時パーティションによるアトミックな置換:クエリを中断せずに上書きする​

パーティションのデータを書き換えるときに「先に削除してからロードする」方法を直接使うと、データをクエリできない期間が生じます。一時パーティションによるアトミックな置換を使えば、この問題を回避できます。

手順:

  1. 対象パーティションに対応する一時パーティションを作成します。
  2. 新しいデータを一時パーティションにロードします。
  3. 置換操作によって元のパーティションをアトミックに置き換えます。

詳しい使い方は、一時パーティションを参照してください。テーブル全体をアトミックに置き換える場合は、テーブルのアトミックな置換を参照してください。

削除方法の比較​

方法構文のキーワード削除単位性能すべてのテーブルモデルに対応
DELETE 文DELETE FROM条件に一致するデータ中はい
パーティション削除TRUNCATE PARTITIONパーティション全体高(メタデータのみ)パーティション分割されたテーブルのみ
テーブル全体の削除TRUNCATE TABLEテーブル全体高はい
削除フラグ__DORIS_DELETE_SIGN__ を書き込む主キー単位高(一括処理)Unique Key モデルのみ
一時パーティションによるアトミックな置換REPLACE PARTITIONパーティション全体高パーティション分割されたテーブルのみ

注意事項​

  • バージョン数への影響:削除操作によって新しいデータバージョンが生成されます。削除を頻繁に行うとバージョン数が増え、クエリ性能に影響する可能性があります。
  • ストレージ領域の解放までの遅延:削除したデータは Compaction が完了するまでストレージ領域を占有します。削除操作だけでは、ストレージ使用量はすぐには減りません。
  • テーブルモデルの制約:削除フラグは主キーを持つ Unique Key モデルにのみ適用できます。パーティションに関する削除は、パーティション分割されたテーブルにのみ適用できます。

よくある質問(FAQ)​

Q1:DELETE 文と TRUNCATE の違いは何ですか?

DELETE 文は WHERE 条件に基づいてデータを削除し、どのテーブルでも使用できます。TRUNCATE はメタデータのみを変更してテーブル全体またはパーティション全体を直接削除します。処理は速い一方、削除単位は大きくなります。

Q2:削除後すぐにストレージ領域が解放されないのはなぜですか?

削除後のデータがストレージから実際に除去されるのは、バックグラウンドでの Compaction によるマージが完了してからです。これは通常の動作です。

Q3:CDC 同期で発生する DELETE イベントを効率的に処理するにはどうすればよいですか?

Unique Key 主キーモデルと削除フラグを組み合わせる方法を推奨します。大量の主キーを一括削除でき、DELETE 文を個別に実行するより大幅に効率的です。

Q4:パーティションデータの書き換え中もクエリを中断させない方法はありますか?

一時パーティションによるアトミックな置換を使用します。まず新しいデータを一時パーティションに書き込み、次にアトミックな置換操作でパーティションを切り替えます。この処理全体はクエリに対して透過的です。