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
.