ClickHouseデータの更新および削除
ClickHouseは高ボリュームの分析作業に特化していますが、特定の状況では既存のデータを変更または削除することも可能です。これらの操作は「ミューテーション」と呼ばれ、ALTER TABLE
コマンドを使用して実行されます。
データの更新
ALTER TABLE...UPDATE
コマンドを使用して、テーブル内の行を更新します。
<expression>
は <filter_expr>
が満たされるカラムの新しい値です。<expression>
はカラムと同じデータ型であるか、CAST
演算子を使用して同じデータ型に変換可能でなければなりません。<filter_expr>
はデータの各行に対して UInt8
(ゼロまたは非ゼロ)の値を返す必要があります。複数の UPDATE <column>
ステートメントをカンマで区切って、単一の ALTER TABLE
コマンドに結合することができます。
例:
- このようなミューテーションにより、辞書を参照して
visitor_ids
を新しいものに置き換えることができます:
- 1つのコマンドで複数の値を変更することは、複数のコマンドよりも効率的です:
- シャードテーブルに対してミューテーションを
ON CLUSTER
で実行することができます:
主キーまたはソートキーの一部であるカラムを更新することはできません。
データの削除
ALTER TABLE
コマンドを使用して、行を削除します:
<filter_expr>
はデータの各行に対して UInt8 の値を返す必要があります。
例
- カラムが値の配列に含まれているレコードを削除します:
- このクエリは何を変更しますか?
テーブル内のすべてのデータを削除する場合、TRUNCATE TABLE [<database].]<table>
コマンドを使用する方が効率的です。このコマンドも ON CLUSTER
で実行できます。
詳細については、DELETE
ステートメント のドキュメントページを参照してください。
軽量削除
行を削除する別のオプションは、DELETE FROM
コマンドを使用することで、これは 軽量削除 と呼ばれます。削除された行は直ちに削除としてマークされ、すべての後続のクエリから自動的にフィルタリングされますので、パーツのマージを待ったり、FINAL
キーワードを使用したりする必要はありません。データのクリーンアップはバックグラウンドで非同期に行われます。
例えば、次のクエリは hits
テーブルから Title
カラムに hello
が含まれるすべての行を削除します:
軽量削除に関するいくつかの注意点:
- この機能は
MergeTree
テーブルエンジンファミリー専用です。 - 軽量削除はデフォルトで非同期です。
mutations_sync
を 1 に設定すると、1つのレプリカがステートメントを処理するのを待つことができ、mutations_sync
を 2 に設定するとすべてのレプリカを待つことができます。