ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_exprManipula 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
- Mutações
- Sincronia das consultas ALTER
- Configuração mutations_sync
UPDATEleve - Alternativa de atualização leve usando partes de patchAPPLY PATCHES- Aplicar manualmente patches de atualizações leves
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.