| 方法 | 構文 | 使用する場面 |
|---|---|---|
| 論理削除 | DELETE FROM [table] | 少量のデータを削除する場合に使用します。行は以降のすべてのSELECTクエリから直ちに除外されますが、最初は内部的に削除済みとしてマークされるだけで、ディスクからは削除されません。 |
| 削除ミューテーション | ALTER TABLE [table] DELETE | データを直ちにディスクから削除する必要がある場合 (たとえばコンプライアンス要件への対応時) に使用します。SELECTのパフォーマンスに悪影響を与えます。 |
| テーブルをTRUNCATEする | TRUNCATE TABLE [db.table] | テーブル内のすべてのデータを効率的に削除します。 |
| パーティションの削除 | DROP PARTITION | パーティション内のすべてのデータを効率的に削除します。 |
論理削除
SELECT クエリで自動的に除外されます。これらの削除済み行はその後、通常のマージサイクルの中で削除されるため、I/O の負荷を抑えられます。そのため、一定期間は、データが実際にストレージから削除されず、削除済みとしてマークされているだけの場合があります。データが確実に削除される必要がある場合は、上記の ミューテーション コマンドを検討してください。
DELETE ステートメントで削除すると、SELECT クエリのパフォーマンスにも悪影響を与える可能性があります。また、このコマンドはプロジェクションを持つテーブルとは互換性がありません。
この操作では、削除された行をマークする (_row_exists カラムを追加する) ためにミューテーションが使用されるため、一定の I/O が発生する点に注意してください。
一般に、削除されたデータがディスク上に残っていても許容できる場合 (たとえば、コンプライアンス要件に関わらないケース) は、ミューテーションよりも論理削除を優先すべきです。ただし、すべてのデータを削除する必要がある場合は、この方法も避けるべきです。
論理削除の詳細をご覧ください。
削除ミューテーション
ALTER TABLE ... DELETE コマンドを使用して発行できます。
WHERE 式に一致するすべてのパーツを書き換えます。この処理にはアトミック性がありません。変異後のパーツは準備ができ次第すぐに置き換えられるため、ミューテーションの実行中に開始された SELECT クエリでは、すでに変異済みのパーツのデータと、まだ変異されていないパーツのデータの両方が見えることになります。ユーザーは system.mutations テーブルで進行状況を追跡できます。これらは I/O 負荷の高い操作であり、クラスターの SELECT パフォーマンスに影響する可能性があるため、使用は最小限にとどめるべきです。
削除ミューテーション の詳細を参照してください。
テーブルをTRUNCATEする
TRUNCATE TABLE コマンドを使用します。これは軽量な処理です。