Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ALTER TABLE ... UPDATE

ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr

指定したフィルタ式に一致するデータを操作します。ミューテーションとして実装されています。

filter_exprUInt8 型である必要があります。このクエリは、filter_expr が 0 以外の値を取る行について、指定したカラムの値を対応する式の値に更新します。値は CAST 演算子を使用してカラムの型にキャストされます。プライマリキーまたはパーティションキーの計算に使用されるカラムの更新はサポートされていません。

1 つのクエリに、カンマ区切りで複数のコマンドを含めることができます。

クエリ処理の同期性は、mutations_sync 設定で定義されます。デフォルトでは非同期です。

関連項目

マテリアライズドカラム

更新されたカラムを参照する式を持つ MATERIALIZED カラムは、ミューテーション によって再計算されるため、保存された値は新しいデータとの整合性が保たれます。

EPHEMERAL カラムから計算されたカラム

EPHEMERAL カラムは INSERT の実行時にのみ存在し、保存されません。そのため、これを基に計算された MATERIALIZED カラムは、ミューテーションによって再計算できません。このようなカラムには INSERT 時に計算された値が保持され、その後、その値は式と一致しなくなります。

CREATE TABLE test
(
    x Int32,
    e Int32 EPHEMERAL 0,
    m Int32 MATERIALIZED x + e
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO test (x, e) VALUES (1, 7);

ALTER TABLE test UPDATE x = 2 WHERE 1;

SELECT x, m FROM test;
┌─x─┬─m─┐
│ 2 │ 8 │
└───┴───┘

m8、つまり INSERT 時に計算された値であり、2 + 7 ではありません。e の値は、それを 指定した INSERT の外部では利用できません。この理由でカラムをスキップすると、mutation は server log に警告を記録します。 このようなカラムを最新の状態にするには、影響を受ける行を再度 INSERT してください。

Navigation