Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ClickHouseデータの更新と削除

All quickstarts
データウェアハウジングOSS

ClickHouse は大量の分析ワークロード向けに設計されていますが、状況によっては既存データの変更や削除を行うこともできます。これらの操作は「ミューテーション」と呼ばれ、ALTER TABLE コマンドを使用して実行します。

データの更新

テーブルの行を更新するには、ALTER TABLE...UPDATE コマンドを使用します。

ALTER TABLE [<database>.]<table> UPDATE <column> = <expression> WHERE <filter_expr>

<expression> は、<filter_expr> を満たすカラムの新しい値です。<expression> は、そのカラムと同じデータ型であるか、CAST 演算子を使って同じデータ型に変換できる必要があります。<filter_expr> は、データの各行に対して UInt8 (ゼロまたは非ゼロ) の値を返す必要があります。複数の UPDATE <column> ステートメントは、カンマ区切りで 1 つの ALTER TABLE コマンドにまとめられます。

:

  1. 次のようなミューテーション を使うと、Dictionary ルックアップで visitor_ids を新しいものに置き換えて更新できます。

    ALTER TABLE website.clicks
    UPDATE visitor_id = getDict('visitors', 'new_visitor_id', visitor_id)
    WHERE visit_date < '2022-01-01'
  2. 1 つのコマンドで複数の値を変更したほうが、複数のコマンドに分けるより効率的な場合があります。

    ALTER TABLE website.clicks
    UPDATE url = substring(url, position(url, '://') + 3), visitor_id = new_visit_id
    WHERE visit_date < '2022-01-01'
  3. 分片テーブルでは、ミューテーション を ON CLUSTER で実行できます。

    ALTER TABLE clicks ON CLUSTER main_cluster
    UPDATE click_count = click_count / 2
    WHERE visitor_id ILIKE '%robot%'

データの削除

データを削除するには、ALTER TABLE コマンドを使用します。

ALTER TABLE [<database>.]<table> DELETE WHERE <filter_expr>

<filter_expr> は、データの各行に対して UInt8 値を返す必要があります。

  1. カラムの値が配列内のいずれかの値に含まれるレコードを削除します。

    ALTER TABLE website.clicks DELETE WHERE visitor_id in (253, 1002, 4277)
  2. このクエリは何を変更するでしょうか?

    ALTER TABLE clicks ON CLUSTER main_cluster DELETE WHERE visit_date < '2022-01-02 15:00:00' AND page_id = '573'

詳細は、DELETE ステートメント のドキュメントページを参照してください。

論理削除

行を削除するもう 1 つの方法として、論理削除と呼ばれる DELETE FROM コマンドがあります。削除された行は直ちに削除済みとしてマークされ、以降のすべてのクエリ結果から自動的に除外されるため、パーツのマージを待ったり、FINAL キーワードを使用したりする必要はありません。データのクリーンアップはバックグラウンドで非同期に実行されます。

DELETE FROM [db.]table [ON CLUSTER cluster] [WHERE expr]

たとえば、次のクエリは、Title カラムにテキスト hello を含む hits テーブル内のすべての行を削除します。

DELETE FROM hits WHERE Title LIKE '%hello%';

論理削除に関する補足:

  • この機能は、MergeTree テーブルエンジンファミリーでのみ利用できます。
  • 論理削除はデフォルトで同期的に実行され、すべてのレプリカが削除を処理するまで待機します。この動作は、lightweight_deletes_sync 設定 で制御されます。
Navigation