Перейти к основному содержимому
Перейти к основному содержимому

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.