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
.