Префикс
ALTER TABLE отличает этот синтаксис от большинства других систем с поддержкой SQL. Он призван показать, что, в отличие от похожих запросов в OLTP-базах данных, это ресурсоёмкая операция, не предназначенная для частого использования.filter_expr должен иметь тип UInt8. Этот запрос обновляет значения указанных столбцов значениями соответствующих выражений в строках, для которых filter_expr принимает ненулевое значение. Значения приводятся к типу столбца с помощью оператора CAST. Обновление столбцов, которые используются при вычислении первичного ключа или ключа партиционирования, не поддерживается.
Один запрос может содержать несколько команд, разделённых запятыми.
Предложение IN PARTITION ограничивает мутацию перечисленными партициями. Без него в таблицах семейства ReplicatedMergeTree, когда настройка optimize_mutations_with_partition_pruning включена (по умолчанию), ClickHouse автоматически определяет условия ключа партиционирования в filter_expr и выполняет мутации только затронутых партиций. В нереплицируемых таблицах MergeTree используйте явное предложение IN PARTITION, чтобы ограничить мутацию конкретными партициями.
Синхронность обработки запроса определяется настройкой mutations_sync. По умолчанию обработка выполняется асинхронно.
См. также
- Мутации
- Синхронность запросов ALTER
- настройка mutations_sync
- Легковесный
UPDATE- Альтернативное легковесное обновление с использованием патч-частей APPLY PATCHES- Ручное применение патчей из легковесных обновлений
Материализованные столбцы
Значение столбцаMATERIALIZED, выражение которого использует обновлённый
столбец, пересчитывается в ходе мутации, поэтому оно остаётся согласованным с новыми данными.
Столбцы, вычисляемые на основе EPHEMERAL-столбцов
СтолбецEPHEMERAL существует только во время выполнения
INSERT и никогда не сохраняется, поэтому MATERIALIZED-столбец, вычисляемый на его основе, нельзя пересчитать с помощью
мутации. Такой столбец сохраняет значение, вычисленное во время INSERT, которое впоследствии перестаёт соответствовать его
выражению:
m равно 8 — значению, вычисленному при выполнении INSERT, а не 2 + 7: значение e недоступно
за пределами INSERT, в котором оно было задано. Если по этой причине мутация пропускает
столбец, она записывает предупреждение в журнал сервера. Чтобы обновить такой столбец, повторно выполните INSERT для затронутых строк.