Перейти к основному содержимому
Перейти к основному содержимому

ALTER

Большинство запросов ALTER TABLE изменяют настройки или данные таблицы:

Модификатор
COLUMN
PARTITION
DELETE
UPDATE
ORDER BY
INDEX
CONSTRAINT
TTL
STATISTICS
APPLY DELETED MASK
примечание

Большинство запросов ALTER TABLE поддерживаются только для *MergeTree, Merge и Distributed таблиц.

Эти инструкции ALTER манипулируют представлениями:

ИнструкцияОписание
ALTER TABLE ... MODIFY QUERYИзменяет структуру материализованного представления.
ALTER LIVE VIEWОбновляет live-представление.

Эти инструкции ALTER изменяют сущности, связанные с контролем доступа на основе ролей:

Инструкция
USER
ROLE
QUOTA
ROW POLICY
SETTINGS PROFILE
ИнструкцияОписание
ALTER TABLE ... MODIFY COMMENTДобавляет, изменяет или удаляет комментарии к таблице, независимо от того, были ли они установлены ранее или нет.
ALTER NAMED COLLECTIONИзменяет именованные коллекции.

Мутации

Запросы ALTER, которые предназначены для манипуляции с данными таблицы, реализуются с помощью механизма под названием "мутации", наиболее заметно ALTER TABLE ... DELETE и ALTER TABLE ... UPDATE. Они являются асинхронными фоновыми процессами, аналогичными слияниям в таблицах MergeTree, которые производят новые "мутациированные" версии частей.

Для таблиц *MergeTree мутации выполняются путем перезаписи целых частей данных. Отсутствует атомарность — части заменяются мутабельными частями, как только они готовы, а запрос SELECT, который начал выполняться во время мутации, увидит данные из частей, которые уже были мутивированы, вместе с данными из частей, которые еще не были мутивированы.

Мутации полностью упорядочены по порядку их создания и применяются к каждой части в этом порядке. Мутации также частично упорядочены по запросам INSERT INTO: данные, которые были вставлены в таблицу до подачи мутации, будут мутивированы, а данные, вставленные после этого, мутивированы не будут. Обратите внимание, что мутации не блокируют вставки никаким образом.

Запрос мутации возвращается немедленно после добавления записи мутации (в случае реплицируемых таблиц в ZooKeeper, для нереплицируемых таблиц - в файловую систему). Сама мутация выполняется асинхронно с использованием настроек профиля системы. Чтобы отслеживать прогресс мутаций, вы можете использовать таблицу system.mutations. Мутация, которая была успешно подана, будет продолжать выполняться даже если сервера ClickHouse будут перезапущены. Нет способа откатить мутацию после ее подачи, но если мутация застряла по какой-либо причине, ее можно отменить с помощью запроса KILL MUTATION.

Записи для завершенных мутаций не удаляются сразу (количество сохраненных записей определяется параметром движка хранения finished_mutations_to_keep). Более старые записи мутаций удаляются.

Синхронность запросов ALTER

Для нереплицируемых таблиц все запросы ALTER выполняются синхронно. Для реплицируемых таблиц запрос просто добавляет инструкции для соответствующих действий в ZooKeeper, а сами действия выполняются как можно скорее. Тем не менее, запрос может ожидать завершения этих действий на всех репликах.

Для запросов ALTER, которые создают мутации (например: включая, но не ограничиваясь UPDATE, DELETE, MATERIALIZE INDEX, MATERIALIZE PROJECTION, MATERIALIZE COLUMN, APPLY DELETED MASK, CLEAR STATISTIC, MATERIALIZE STATISTIC), синхронность определяется настройкой mutations_sync.

Для других запросов ALTER, которые только изменяют метаданные, вы можете использовать настройку alter_sync, чтобы настроить ожидание.

Вы можете указать, как долго (в секундах) ждать неактивные реплики для выполнения всех запросов ALTER с настройкой replication_wait_for_inactive_replica_timeout.

примечание

Для всех запросов ALTER, если alter_sync = 2 и некоторые реплики не активны более чем на время, указанное в настройке replication_wait_for_inactive_replica_timeout, тогда выбрасывается исключение UNFINISHED.