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
.