Перейти к основному содержанию
Набор запросов, позволяющих изменять структуру таблицы. Синтаксис:
В запросе укажите список из одного или нескольких действий, разделённых запятыми. Каждое действие — операция над столбцом. Поддерживаются следующие действия:
  • ADD COLUMN — Добавляет новый столбец в таблицу.
  • DROP COLUMN — Удаляет столбец.
  • RENAME COLUMN — Переименовывает существующий столбец.
  • CLEAR COLUMN — Сбрасывает значения столбца.
  • COMMENT COLUMN — Добавляет к столбцу текстовый комментарий.
  • MODIFY COLUMN — Изменяет тип столбца, выражение по умолчанию, TTL и настройки столбца.
  • MODIFY COLUMN REMOVE — Удаляет одно из свойств столбца.
  • MODIFY COLUMN MODIFY SETTING — Изменяет настройки столбца.
  • MODIFY COLUMN RESET SETTING — Сбрасывает настройки столбца.
  • MODIFY COLUMN ADD ENUM VALUES — Добавляет новые значения в Enum.
  • MATERIALIZE COLUMN — Материализует столбец в частях, где он отсутствует. Эти действия подробно описаны ниже.

ADD COLUMN

Добавляет в таблицу новый столбец с указанными name, type, codec и default_expr (см. раздел Выражения по умолчанию). Если указано условие IF NOT EXISTS, запрос не вернёт ошибку, если столбец уже существует. Если указать AFTER name_after (имя другого столбца), столбец будет добавлен после него в списке столбцов таблицы. Если вы хотите добавить столбец в начало таблицы, используйте условие FIRST. В противном случае столбец добавляется в конец таблицы. В цепочке действий name_after может быть именем столбца, добавленного одним из предыдущих действий. Добавление столбца лишь изменяет структуру таблицы, не выполняя никаких действий с данными. После ALTER данные на диске не появляются. Если при чтении из таблицы для столбца отсутствуют данные, он заполняется значениями по умолчанию (путём вычисления выражения по умолчанию, если оно задано, либо с использованием нулей или пустых строк). Столбец появляется на диске после слияния частей данных (см. MergeTree). Такой подход позволяет мгновенно выполнить запрос ALTER, не увеличивая объём старых данных. Пример:

DROP COLUMN

Удаляет столбец с именем name. Если указано условие IF EXISTS, запрос не вернёт ошибку, если такого столбца не существует. Удаляет данные из файловой системы. Поскольку при этом удаляются файлы целиком, запрос выполняется почти мгновенно.
Нельзя удалить столбец, если на него ссылается materialized view. В противном случае будет возвращена ошибка.
Пример:

RENAME COLUMN

Переименовывает столбец name в new_name. Если указано IF EXISTS, запрос не вернёт ошибку, если столбец не существует. Поскольку переименование не затрагивает сами данные, запрос выполняется почти мгновенно. ПРИМЕЧАНИЕ: Столбцы, указанные в ключевом выражении таблицы (либо в ORDER BY, либо в PRIMARY KEY), нельзя переименовывать. Попытка изменить эти столбцы приведёт к SQL Error [524]. Пример:

CLEAR COLUMN

Сбрасывает все данные в столбце для указанной партиции. Подробнее о том, как задать имя партиции, см. в разделе Как задать выражение партиционирования. Если указано условие IF EXISTS, запрос не вернёт ошибку, если столбец не существует. Пример:

COMMENT COLUMN

Добавляет комментарий к столбцу. Если указано условие IF EXISTS, запрос не вернёт ошибку, если столбец не существует. У каждого столбца может быть только один комментарий. Если для столбца уже задан комментарий, новый комментарий заменит предыдущий. Комментарии хранятся в столбце comment_expression, который возвращает запрос DESCRIBE TABLE. Пример:

MODIFY COLUMN

Этот запрос изменяет свойства столбца name:
  • Тип
  • Выражение по умолчанию
  • Кодек сжатия
  • TTL
  • Настройки на уровне столбца
  • Значения Enum для типов Enum/Enum8/Enum16
Примеры изменения кодеков сжатия столбцов см. в разделе Column Compression Codecs. Примеры изменения TTL столбцов см. в разделе Column TTL. Примеры изменения настроек на уровне столбца см. в разделе Column-level Settings. Если указано условие IF EXISTS, запрос не вернёт ошибку, если столбец отсутствует. При изменении типа значения преобразуются так, как если бы к ним были применены функции toType. Если изменяется только выражение по умолчанию, запрос не выполняет никаких сложных операций и завершается почти мгновенно. Пример:
Изменение типа столбца — единственное сложное действие: при этом меняется содержимое файлов с данными. Для больших таблиц это может занять много времени. Запрос также может изменять порядок столбцов с помощью предложения FIRST | AFTER, см. описание ADD COLUMN, но в этом случае указание типа столбца обязательно. Пример:
Запрос ALTER является атомарным. Для таблиц MergeTree он также выполняется без блокировок. Запрос ALTER на изменение столбцов реплицируется. Инструкции сохраняются в ZooKeeper, после чего каждая реплика применяет их. Все запросы ALTER выполняются в одном и том же порядке. Запрос ждёт завершения соответствующих действий на других репликах. Однако запрос на изменение столбцов в реплицируемой таблице может быть прерван, а все действия будут выполнены асинхронно.
Будьте осторожны при изменении столбца Nullable на Non-Nullable. Убедитесь, что в нём нет значений NULL, иначе это вызовет проблемы при чтении. В таком случае можно прервать мутацию и вернуть столбцу тип Nullable.

MODIFY COLUMN REMOVE

Удаляет одно из свойств столбца: DEFAULT, ALIAS, MATERIALIZED, CODEC, COMMENT, TTL, SETTINGS. Синтаксис:
Пример Удалите TTL:
См. также

MODIFY COLUMN MODIFY SETTING

Изменяет настройку столбца. Синтаксис:
Пример Измените значение max_compress_block_size для столбца на 1MB:

MODIFY COLUMN RESET SETTING

Сбрасывает настройку столбца, а также удаляет объявление этой настройки из выражения столбца в CREATE-запросе таблицы. Синтаксис:
Пример Сбросьте настройку столбца max_compress_block_size до значения по умолчанию:

MODIFY COLUMN ADD ENUM VALUES

Добавляет новые значения в столбец типа Enum, Enum8, Enum16, Nullable(Enum), Nullable(Enum8) или Nullable(Enum16) Синтаксис:
Пример Добавьте в столбец enum_column_name два значения:

MATERIALIZE COLUMN

Материализует столбец с выражением для значения DEFAULT или MATERIALIZED. При добавлении материализованного столбца с помощью ALTER TABLE table_name ADD COLUMN column_name MATERIALIZED существующие строки без материализованных значений автоматически не заполняются. Оператор MATERIALIZE COLUMN можно использовать, чтобы перезаписать существующие данные столбца после добавления или обновления выражения DEFAULT или MATERIALIZED (при этом обновляются только метаданные, а существующие данные не изменяются). Обратите внимание, что материализация столбца, входящего в ключ сортировки, — недопустимая операция, поскольку она может нарушить порядок сортировки. Реализовано как мутация. Для столбцов с новым или обновлённым выражением значения MATERIALIZED перезаписываются все существующие строки. Для столбцов с новым или обновлённым выражением значения DEFAULT поведение зависит от версии ClickHouse:
  • В ClickHouse < v24.2 перезаписываются все существующие строки.
  • ClickHouse >= v24.2 различает, было ли значение в столбце с выражением значения DEFAULT явно указано при вставке строки или нет, то есть вычислено на основе выражения значения DEFAULT. Если значение было указано явно, ClickHouse оставляет его без изменений. Если значение было вычислено, ClickHouse изменяет его на новое или обновлённое выражение значения MATERIALIZED.
Синтаксис:
  • Если вы укажете PARTITION, будет материализован столбец только для указанной партиции.
Пример
См. также

Ограничения

Запрос ALTER позволяет создавать и удалять отдельные элементы (столбцы) во вложенных структурах данных, но не целые вложенные структуры данных. Чтобы добавить вложенную структуру данных, можно добавить столбцы с именем вида name.nested_name и типом Array(T). Вложенная структура данных эквивалентна нескольким столбцам типа Array, имя которых имеет одинаковый префикс до точки. Переименование столбцов с точками в именах поддерживается лишь частично. Точки зарезервированы для доступа к подстолбцам Nested, поэтому префикс (имя родительского элемента) должен оставаться неизменным. Менять можно только суффикс (имя подстолбца). Например, a.b можно переименовать в a.c, но переименовать a.b в b.d нельзя, поскольку при этом изменяется родительский префикс Nested. Удаление столбцов из первичного ключа или ключа выборки (столбцов, используемых в выражении ENGINE) не поддерживается. Изменение типа столбцов, входящих в первичный ключ, возможно только в том случае, если оно не приводит к изменению данных (например, можно добавлять значения в Enum или менять тип с DateTime на UInt32). Если возможностей запроса ALTER недостаточно для внесения нужных изменений в таблицу, можно создать новую таблицу, скопировать в неё данные с помощью запроса INSERT SELECT, затем поменять таблицы местами с помощью запроса RENAME и удалить старую таблицу. Запрос ALTER блокирует все чтения и записи для таблицы. Иными словами, если в момент выполнения запроса ALTER уже выполняется длительный SELECT, запрос ALTER будет ждать его завершения. В то же время все новые запросы к той же таблице будут ждать, пока выполняется этот ALTER. Для таблиц, которые сами не хранят данные (например, Merge и Distributed), ALTER только изменяет структуру таблицы и не меняет структуру подчинённых таблиц. Например, при выполнении ALTER для таблицы Distributed вам также потребуется выполнить ALTER для таблиц на всех удалённых серверах.
Последнее изменение 25 июня 2026 г.