mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-13 18:02:24 +00:00
56 lines
3.9 KiB
Markdown
56 lines
3.9 KiB
Markdown
---
|
||
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)に関する詳細情報。
|