ClickHouse/docs/ja/faq/operations/delete-old-data.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

56 lines
3.9 KiB
Markdown
Raw Normal View History

2024-11-18 02:58:58 +00:00
---
slug: /ja/faq/operations/delete-old-data
title: ClickHouseテーブルから古いレコードを削除できますか
toc_hidden: true
toc_priority: 20
---
# ClickHouseテーブルから古いレコードを削除できますか {#is-it-possible-to-delete-old-records-from-a-clickhouse-table}
短い答えは「はい」です。ClickHouseは、古いデータを削除してディスクスペースを解放するための複数の仕組みを提供しています。各仕組みは異なるシナリオに対応しています。
## 有効期限 (TTL) {#ttl}
ClickHouseは、条件が発生したときに自動的に値を削除することを可能にします。この条件は、通常はタイムスタンプカラムに対する固定オフセットとして、任意のカラムに基づく式として設定されます。
このアプローチの主要な利点は、TTLが設定されると、データの削除がバックグラウンドで自動的に行われ、外部システムがトリガーを必要としないことです。
:::note
TTLは、データを[/dev/null](https://en.wikipedia.org/wiki/Null_device)に移動するだけでなく、SSDからHDDへのように、異なるストレージシステム間でのデータの移動にも使用できます。
:::
[有効期限 (TTL) の設定](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl)に関する詳細情報。
## DELETE FROM
[DELETE FROM](/docs/ja/sql-reference/statements/delete.md)は、ClickHouseでの標準的なDELETEクエリの実行を可能にします。フィルタ句で対象とされた行は削除としてマークされ、将来の結果セットから除外されます。行のクリーンアップは非同期で行われます。
:::note
DELETE FROMは、バージョン23.3以降で一般に使用可能です。古いバージョンではエクスペリメンタルであり、以下の設定で有効化する必要があります:
```
SET allow_experimental_lightweight_delete = true;
```
:::
## ALTER DELETE {#alter-delete}
ALTER DELETEは非同期バッチ操作を使用して行を削除します。DELETE FROMとは異なり、ALTER DELETE後に実行され、バッチ操作が完了する前のクエリは、削除対象の行を含めます。詳細は[ALTER DELETE](/docs/ja/sql-reference/statements/alter/delete.md)ドキュメントを参照してください。
`ALTER DELETE`は柔軟に古いデータを削除するために発行できます。定期的に行う必要がある場合の主な欠点は、クエリを送信する外部システムが必要になることです。また、ミューテーションは削除する行が1つしかない場合でも完全なパーツをリライトするため、一部のパフォーマンス上の考慮事項があります。
これは、ClickHouseを基にしたシステムを[GDPR](https://gdpr-info.eu)準拠にするための最も一般的なアプローチです。
[ミューテーション](../../sql-reference/statements/alter/index.md#alter-mutations)に関する詳細情報。
## パーティションの削除 {#drop-partition}
`ALTER TABLE ... DROP PARTITION`は、パーティション全体を削除するためのコスト効率の良い方法です。柔軟性には欠け、テーブル作成時に適切なパーティションスキームの設定が必要ですが、それでも一般的なケースの多くをカバーします。ミューテーションと同様に、定期的に使用するには外部システムから実行する必要があります。
[パーティション操作](../../sql-reference/statements/alter/partition.md#alter_drop-partition)に関する詳細情報。
## TRUNCATE {#truncate}
テーブルからすべてのデータを削除することは極端ですが、場合によってはそれが必要なこともあります。
[テーブルトランケーション](/docs/ja/sql-reference/statements/truncate.md)に関する詳細情報。