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.