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 | Изменяет структуру Materialized view. |
| ALTER LIVE VIEW | Обновляет Live view. |
Эти операторы ALTER изменяют сущности, связанные с управлением доступом на основе ролей:
| Оператор |
|---|
| USER |
| ROLE |
| QUOTA |
| ROW POLICY |
| SETTINGS PROFILE |
| Оператор | Описание |
|---|---|
| ALTER TABLE ... MODIFY COMMENT | Добавляет, изменяет или удаляет комментарии к таблице, независимо от того, были ли они установлены ранее или нет. |
| ALTER NAMED COLLECTION | Изменяет Named Collections. |
Mutations
Запросы ALTER, предназначенные для изменения данных таблицы, реализованы с помощью механизма, называемого "мутациями", наиболее заметно ALTER TABLE ... DELETE и ALTER TABLE ... UPDATE. Они являются асинхронными фоновыми процессами, аналогичными объединениям в таблицах MergeTree, которые создают новые "мутивированные" версии частей.
Для таблиц *MergeTree мутации выполняются путем перезаписи целых частей данных.
Об атомарности речи не идет — части заменяются на мутивированные части сразу, как только они готовы, а SELECT запрос, который начал выполняться во время мутации, увидит данные из частей, которые уже были мутивированы, вместе с данными из частей, которые еще не были мутивированы.
Мутации полностью упорядочены по порядку создания и применяются к каждой части в этом порядке. Мутации также частично упорядочены с запросами INSERT INTO: данные, которые были вставлены в таблицу до подачи мутации, будут мутивированы, а данные, вставленные после, не будут мутивированы. Обратите внимание, что мутации не блокируют вставки никаким образом.
Запрос мутации возвращает результат сразу после добавления записи мутации (в случае реплицированных таблиц — в ZooKeeper, для нереплицированных таблиц — в файловую систему). Сама мутация выполняется асинхронно с использованием настроек системного профиля. Чтобы отслеживать прогресс мутаций, вы можете использовать таблицу system.mutations. Мутация, которая была успешно подана, продолжит выполняться, даже если серверы ClickHouse перезапустятся. Вернуть мутацию назад после ее подачи невозможно, но если мутация застряла по какой-то причине, ее можно отменить запросом KILL MUTATION.
Записи для завершенных мутаций не удаляются сразу (число сохраненных записей определяется параметром хранилища finished_mutations_to_keep). Более старые записи мутаций удаляются.
Synchronicity of ALTER Queries
Для нереплицированных таблиц все запросы 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.