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

ClickHouseのテーブルから古いレコードを削除することは可能ですか?

短い回答は「はい」です」。ClickHouseには古いデータを削除してディスクスペースを解放する複数のメカニズムがあります。各メカニズムは異なるシナリオに対して設計されています。

TTL

ClickHouseでは、特定の条件が発生したときに自動的に値を削除することができます。この条件は、通常は任意のタイムスタンプカラムに対する静的オフセットに基づく式として構成されます。

このアプローチの主な利点は、TTLが設定されると、データの削除はバックグラウンドで自動的に行われるため、外部システムをトリガーする必要がないことです。

注記

TTLは、データを/dev/nullに移動するだけでなく、SSDからHDDなどの異なるストレージシステム間で移動するためにも使用できます。

TTLの構成に関する詳細はこちら

DELETE FROM

DELETE FROMは、ClickHouseで標準のDELETEクエリを実行することを可能にします。フィルター句でターゲットにされた行は削除としてマークされ、今後の結果セットから除外されます。行のクリーンアップは非同期で行われます。

注記

DELETE FROMは、バージョン23.3以降で一般的に利用可能です。古いバージョンでは、実験的であり、以下のように有効にする必要があります:

ALTER DELETE

ALTER DELETEは非同期バッチ操作を使用して行を削除します。DELETE FROMとは異なり、ALTER DELETEの後に実行され、バッチ操作が完了する前に実行されるクエリは、削除対象の行を含みます。詳細については、ALTER DELETEのドキュメントを参照してください。

ALTER DELETEは古いデータを柔軟に削除するために発行できます。定期的に行う必要がある場合、主な欠点はクエリを送信するための外部システムが必要なことです。また、単一の行を削除する場合でも、突然変異により完全なパーツが再書き込みされるため、パフォーマンス上の考慮事項もあります。

これは、ClickHouseに基づくシステムをGDPRに準拠させるための最も一般的なアプローチです。

突然変異に関する詳細はこちら

DROP PARTITION

ALTER TABLE ... DROP PARTITIONは、全体のパーティションを削除するためのコスト効率の良い方法を提供します。柔軟性は高くなく、テーブル作成時に適切なパーティショニングスキームが構成される必要がありますが、ほとんどの一般的なケースをカバーします。通常の使用のためには、外部システムから実行する必要があります。

パーティションの操作に関する詳細はこちら

TRUNCATE

テーブルからすべてのデータを削除するのはかなり過激ですが、場合によってはそれが必要なこともあります。

テーブルの切り捨てに関する詳細はこちら