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

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.