Skip to main content
ClickHouse は大量の分析ワークロード向けに設計されていますが、状況によっては既存データの変更や削除を行うこともできます。これらの操作は「ミューテーション」と呼ばれ、ALTER TABLE コマンドを使用して実行します。
頻繁に更新を行う必要がある場合は、ClickHouse の重複排除の利用を検討してください。これにより、ミューテーションイベントを発生させることなく、行の更新や削除を行えます。あるいは、論理更新 または論理削除 を使用してください。

データの更新

テーブルの行を更新するには、ALTER TABLE...UPDATE コマンドを使用します。
<expression> は、<filter_expr> を満たすカラムの新しい値です。<expression> は、そのカラムと同じデータ型であるか、CAST 演算子を使って同じデータ型に変換できる必要があります。<filter_expr> は、データの各行に対して UInt8 (ゼロまたは非ゼロ) の値を返す必要があります。複数の UPDATE <column> ステートメントは、カンマ区切りで 1 つの ALTER TABLE コマンドにまとめられます。 :
  1. 次のようなミューテーション を使うと、Dictionary ルックアップで visitor_ids を新しいものに置き換えて更新できます。
  2. 1 つのコマンドで複数の値を変更したほうが、複数のコマンドに分けるより効率的な場合があります。
  3. 分片テーブルでは、ミューテーション を ON CLUSTER で実行できます。
プライマリキーまたはソートキーの一部であるカラムは更新できません。

データの削除

データを削除するには、ALTER TABLE コマンドを使用します。
<filter_expr> は、データの各行に対して UInt8 値を返す必要があります。
  1. カラムの値が配列内のいずれかの値に含まれるレコードを削除します。
  2. このクエリは何を変更するでしょうか?
テーブル内のすべてのデータを削除する場合は、TRUNCATE TABLE [<database].]<table> コマンドを使用するほうが効率的です。このコマンドは ON CLUSTER でも実行できます。
詳細は、DELETE ステートメント のドキュメントページを参照してください。

論理削除

行を削除するもう 1 つの方法として、論理削除と呼ばれる DELETE FROM コマンドがあります。削除された行は直ちに削除済みとしてマークされ、以降のすべてのクエリ結果から自動的に除外されるため、パーツのマージを待ったり、FINAL キーワードを使用したりする必要はありません。データのクリーンアップはバックグラウンドで非同期に実行されます。
たとえば、次のクエリは、Title カラムにテキスト hello を含む hits テーブル内のすべての行を削除します。
論理削除に関する補足:
  • この機能は、MergeTree テーブルエンジンファミリーでのみ利用できます。
  • 論理削除はデフォルトで同期的に実行され、すべてのレプリカが削除を処理するまで待機します。この動作は、lightweight_deletes_sync 設定 で制御されます。
Last modified on July 2, 2026