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 연산자를 사용해 컬럼 유형으로 변환됩니다. 프라이머리 키 또는 파티션 키 계산에 사용되는 컬럼은 업데이트할 수 없습니다.

하나의 쿼리에는 쉼표로 구분된 여러 명령을 포함할 수 있습니다.

쿼리 처리의 동기 여부는 mutations_sync 설정으로 정의됩니다. 기본값은 비동기입니다.

관련 항목

Materialized 컬럼

표현식에서 업데이트된 컬럼을 읽는 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 │
└───┴───┘

mINSERT 중에 계산된 값인 8이며, 2 + 7이 아닙니다. e의 값은 이를 제공한 INSERT 외부에서는 사용할 수 없습니다. 이러한 이유로 컬럼을 건너뛸 경우 뮤테이션은 서버 로그에 경고를 기록합니다. 이러한 컬럼을 최신 상태로 업데이트하려면 영향을 받는 행을 다시 INSERT하십시오.

Navigation