メインコンテンツまでスキップ
メインコンテンツまでスキップ

削除の概要

ClickHouseでは、データを削除するためのいくつかの方法があり、それぞれに利点とパフォーマンス特性があります。削除するデータモデルとデータの量に応じて適切な方法を選択する必要があります。

メソッド構文使用するタイミング
軽量削除DELETE FROM [table]少量のデータを削除する際に使用します。行はすべての後続のSELECTクエリから即座にフィルタリングされますが、ディスクからは実際には削除されず、内部的にのみ削除されたとマークされます。
削除ミューテーションALTER TABLE [table] DELETEディスクからデータを即時に削除する必要がある場合(例えば、コンプライアンスのため)に使用します。SELECTのパフォーマンスに悪影響を及ぼします。
テーブルの切り捨てTRUNCATE TABLE [db.table]テーブルからすべてのデータを効率的に削除します。
パーティションの削除DROP PARTITIONパーティションからすべてのデータを効率的に削除します。

以下は、ClickHouseでデータを削除するさまざまな方法の概要です:

軽量削除

軽量削除は、行を即座に削除されたとマークし、その結果、すべての後続の SELECT クエリから自動的にフィルタリングできるようにします。これらの削除された行の後続の削除は自然なマージサイクル中に行われるため、I/Oが少なくて済みます。したがって、未指定の期間、データは実際にはストレージから削除されず、削除されたとマークされているだけの可能性があります。データを確実に削除する必要がある場合は、上記のミューテーションコマンドを検討してください。

-- delete all data from 2018 with a lightweight delete. Not recommended.
DELETE FROM posts WHERE toYear(CreationDate) = 2018

軽量の DELETE ステートメントを使用して大量のデータを削除することは、SELECT クエリのパフォーマンスに悪影響を及ぼす可能性があります。このコマンドは、プロジェクションを持つテーブルとは互換性がありません。

削除された行を マークするための操作にはミューテーションが使用されており(_row_exists カラムを追加)、そのためいくらかのI/Oが発生します。

一般的に、削除されたデータがディスク上に存在することを許容できる場合(例えば、コンプライアンスの場合でないとき)は、軽量削除がミューテーションよりも好まれます。このアプローチは、すべてのデータを削除する必要がある場合には避けるべきです。

軽量削除についてさらに読む。

削除ミューテーション

削除ミューテーションは、ALTER TABLE ... DELETE コマンドを通じて発行できます。例:

-- delete all data from 2018 with a mutation. Not recommended.
ALTER TABLE posts DELETE WHERE toYear(CreationDate) = 2018

これらは、同期的に(非レプリケートの場合、デフォルト)または非同期的に(mutations_sync 設定によって決定)実行できます。これらは非常にI/O集約的であり、WHERE式に一致するすべてのパーツを書き換えます。このプロセスには原子性はありません - パーツは変更されたパーツが準備でき次第置き換えられ、ミューテーション中に実行を開始する SELECT クエリは、既に変更されたパーツからのデータと、まだ変更されていないパーツからのデータを確認します。ユーザーは、systems.mutationsテーブルを通じて進行状況を追跡できます。これらはI/O集約的な操作であり、クラスターのSELECTパフォーマンスに影響を与える可能性があるため、慎重に使用する必要があります。

削除ミューテーションについてさらに読む。

テーブルの切り捨て

テーブル内のすべてのデータを削除する必要がある場合は、下記の TRUNCATE TABLE コマンドを使用します。これは軽量な操作です。

TRUNCATE TABLE posts

TRUNCATE TABLEについてさらに読む。

パーティションの削除

データにカスタムのパーティショニングキーを指定している場合、パーティションを効率的に削除できます。高いカーディナリティのパーティショニングは避けてください。

ALTER TABLE posts (DROP PARTITION '2008')

DROPPARTITIONについてさらに読む。

さらなるリソース