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

TRUNCATE 操作

TRUNCATE は、指定したテーブルまたはパーティションの全データを一度に消去し、テーブル構造とパーティション定義は残します。DELETE と異なり、削除バージョンが生成されず、後続のクエリ性能にも影響しません。そのため、大量のデータを消去する場合に適しています。

クイックナビゲーション​

TRUNCATE を選ぶ場面​

TRUNCATE は、大量のデータを一度に消去する必要がある場合に適しています。

  • テスト環境のリセット: テストデータを消去し、再インポートに備えます。
  • パーティションデータの再構築: 指定したパーティションを消去してから、修正済みのデータを書き込みます。
  • 大量のデータの消去: DELETE と異なり、バージョンが蓄積せず、クエリ性能にも影響しません。
  • 履歴データのアーカイブ後の消去: アーカイブ完了後、元のテーブルまたはパーティションを消去します。

構文とパラメータ​

コマンド形式​

TRUNCATE TABLE [db.]tbl [PARTITION(p1, p2, ...)] [FORCE];

パラメータの説明​

パラメータ必須説明
db.いいえデータベース名。省略すると現在のデータベースを使用します。
tblはいデータを消去するテーブルの名前。
PARTITION(..)いいえパーティション名の一覧を指定します。指定したパーティションだけを消去します。省略するとテーブル全体を消去します。
FORCEいいえデータを直接物理削除します。RECOVER では復元できません。 慎重に使用してください。

使用例​

1. テーブル全体を消去する​

tbl テーブル(example_db 内)の全データを消去します。

TRUNCATE TABLE example_db.tbl;

2. 指定したパーティションを消去する​

p1 と p2 の各パーティション(tbl テーブル内)だけを消去します。

TRUNCATE TABLE tbl PARTITION(p1, p2);

3. 強制的に消去する(復元不可)​

ごみ箱を経由せず、example_db.tbl のデータを直接物理削除します。

TRUNCATE TABLE example_db.tbl FORCE;
注意

FORCE を使用すると、RECOVER ではデータを復元できません。実行前に確認してください。

使用上の制約​

TRUNCATE を実行する前に、次の点を確認してください。

  • データだけを消去し、構造は残す: テーブル構造とパーティション定義は残り、データだけが消去されます。
  • フィルター条件は指定できない: テーブル全体または指定したパーティションだけを消去できます。WHERE 条件は追加できません。
  • テーブルの状態が NORMAL であること: SCHEMA CHANGE の実行中は、そのテーブルのデータを消去できません。
  • 進行中のインポートに影響する: 実行中のインポートタスクが失敗する場合があります。インポートがない時間帯に実行してください。
  • デフォルトでは復元可能: FORCE を使用しなければ、保持期間内に RECOVER でデータを復元できます。

データの復元​

TRUNCATE を FORCE なしで実行した場合、消去したデータはごみ箱に入り、保持期間内であれば復元できます。

RECOVER TABLE [db_name.]table_name;

詳しくは、RECOVER ステートメントの説明を参照してください。

ヒント

ごみ箱の保持期間は、FE の設定項目 catalog_trash_expire_second で制御します。期限を過ぎたデータは完全に削除されます。

TRUNCATE と DELETE の比較​

どちらもデータの削除に使用できますが、適した場面は大きく異なります。

比較項目TRUNCATEDELETE
削除の単位テーブル全体またはパーティション全体行単位。WHERE 条件を指定可能
フィルターの指定不可可能
クエリ性能への影響なし削除バージョンが生成され、クエリ性能に影響する
実行速度非常に速い(メタデータレベルの操作)条件に一致する行数に依存する
デフォルトで復元可能かRECOVER で復元可能(FORCE を使用しない場合)直接は復元できない
主な利用シナリオ大量のデータの消去、パーティションの再構築少量のデータの正確な削除

使い分けの目安:

  • テーブル全体またはパーティション全体を消去する場合は、TRUNCATE を優先します。
  • 条件に基づいて一部のデータを削除する場合は、DELETE を使用します。

よくある質問​

TRUNCATE はテーブル構造も削除しますか?​

いいえ。TRUNCATE が消去するのはデータだけです。テーブル構造、パーティション定義、インデックスなどのメタデータはすべて残ります。

TRUNCATE 後にデータを復元できますか?​

  • FORCE を指定しない場合: 保持期間内であれば、RECOVER で復元できます。
  • FORCE を指定した場合: データは物理削除され、復元できません。

SCHEMA CHANGE の実行中に TRUNCATE を実行できますか?​

いいえ。テーブルの状態が NORMAL である必要があります。それ以外の場合、コマンドはエラーになります。SCHEMA CHANGE の完了後に実行してください。

TRUNCATE は進行中のインポートタスクに影響しますか?​

進行中のインポートタスクが失敗する場合があります。インポートがない時間帯に実行するか、関連するインポートを先に一時停止してください。

TRUNCATE と DROP TABLE の違いは何ですか?​

  • TRUNCATE: テーブル構造を残し、データだけを消去します。
  • DROP TABLE: テーブル自体を構造とデータも含めて削除します。

パーティション内の一部のデータだけを消去できますか?​

いいえ。TRUNCATE で消去できるのは、テーブル全体または指定したパーティション全体だけです。行単位のフィルタリングはできません。条件に基づいて削除する場合は、DELETEを使用してください。