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

Manipula os dados que correspondem à expressão de filtro especificada. É implementado como uma mutação.

A filter_expr deve ser do tipo UInt8. Esta consulta atualiza os valores das colunas especificadas para os valores das expressões correspondentes nas linhas em que a filter_expr assume um valor diferente de zero. Os valores são convertidos para o tipo da coluna usando o operador CAST. Não há suporte para atualizar colunas usadas no cálculo da chave primária ou da chave de partição.

Uma única consulta pode conter vários comandos separados por vírgulas.

A sincronia do processamento da consulta é definida pela configuração mutations_sync. Por padrão, ela é assíncrona.

Veja também

Colunas materializadas

Uma coluna MATERIALIZED cuja expressão lê uma coluna atualizada é recalculada pela mutação, garantindo que seu valor armazenado permaneça consistente com os novos dados.

Colunas calculadas a partir de colunas EPHEMERAL

Uma coluna EPHEMERAL existe apenas durante um INSERT e nunca é armazenada. Portanto, uma coluna MATERIALIZED calculada a partir dela não pode ser recalculada por uma mutação. Essa coluna mantém o valor calculado no momento do INSERT, que posteriormente deixa de corresponder à sua expressão:

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 │
└───┴───┘

m é 8, o valor calculado durante o INSERT, e não 2 + 7: o valor de e não está disponível fora do INSERT que o forneceu. A mutação registra um aviso no log do servidor ao ignorar uma coluna por esse motivo. Para atualizar essa coluna, execute novamente o INSERT nas linhas afetadas.

Navigation