ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_exprManipula los datos que coinciden con la expresión de filtrado especificada. Se implementa como una mutación.
filter_expr debe ser de tipo UInt8. Esta consulta actualiza los valores de las columnas especificadas con los valores de las expresiones correspondientes en las filas para las que filter_expr toma un valor distinto de cero. Los valores se convierten al tipo de la columna mediante el operador CAST. No se admite actualizar columnas que se usan en el cálculo de la clave primaria o de la clave de partición.
Una consulta puede contener varios comandos separados por comas.
El carácter síncrono del procesamiento de la consulta se define mediante la configuración mutations_sync. De forma predeterminada, es asíncrona.
Véase también
- Mutaciones
- Sincronía de las consultas ALTER
- Configuración mutations_sync
UPDATEligera - Actualización ligera alternativa mediante partes de parcheAPPLY PATCHES- Aplicar manualmente parches de actualizaciones ligeras
Columnas materializadas
Una columna MATERIALIZED cuya expresión hace referencia a una
columna actualizada se recalcula mediante la mutación, por lo que su valor almacenado se mantiene coherente con los nuevos datos.
Columnas calculadas a partir de columnas EPHEMERAL
Una columna EPHEMERAL existe únicamente durante un
INSERT y nunca se almacena, por lo que una columna MATERIALIZED calculada a partir de ella no puede volver a calcularse mediante una
mutación. Esta columna conserva el valor calculado en el momento del INSERT, que deja de coincidir con su
expresión:
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 es 8, el valor calculado durante el INSERT, y no 2 + 7: el valor de e no está disponible
fuera del INSERT que lo proporcionó. La mutación escribe una advertencia en el registro del servidor cuando omite una
columna por este motivo. Para actualizar dicha columna, vuelva a insertar las filas afectadas mediante INSERT.