ALTER TABLE#

Синтаксис#

ALTER TABLE [ IF EXISTS ] name RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name ADD COLUMN [ IF NOT EXISTS ] column_name data_type
  [ DEFAULT default ] [ NOT NULL ] [ COMMENT comment ]
  [ WITH ( property_name = expression [, ...] ) ]
  [ FIRST | LAST | AFTER after_column_name ]
ALTER TABLE [ IF EXISTS ] name DROP COLUMN [ IF EXISTS ] column_name
ALTER TABLE [ IF EXISTS ] name RENAME COLUMN [ IF EXISTS ] old_name TO new_name
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name SET DEFAULT expression
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name DROP DEFAULT
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name SET DATA TYPE new_type
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name DROP NOT NULL
ALTER TABLE name SET AUTHORIZATION ( user | USER user | ROLE role )
ALTER TABLE name SET PROPERTIES property_name = expression [, ...]
ALTER TABLE name EXECUTE command [ ( parameter => expression [, ... ] ) ]
    [ WHERE expression ]

Описание#

Изменяет определение существующей таблицы.

Необязательное предложение IF EXISTS при использовании перед именем таблицы подавляет ошибку, если таблица не существует.

Необязательное предложение IF EXISTS при использовании перед именем столбца подавляет ошибку, если столбец не существует.

Необязательное предложение IF NOT EXISTS подавляет ошибку, если столбец уже существует.

SET PROPERTIES#

Инструкция ALTER TABLE SET PROPERTIES, за которой следует несколько пар property_name и expression, применяет указанные свойства и значения к таблице. Если уже заданное свойство отсутствует в этой инструкции, оно остается неизменным в таблице.

Свойство в инструкции SET PROPERTIES можно установить в DEFAULT, что возвращает его значение к значению по умолчанию для этой таблицы.

Поддержка ALTER TABLE SET PROPERTIES зависит от коннектора, поскольку не все коннекторы поддерживают изменение свойств таблицы.

EXECUTE#

Инструкция ALTER TABLE EXECUTE, за которой следуют command и parameters, изменяет таблицу согласно указанной команде и параметрам. ALTER TABLE EXECUTE поддерживает разные команды в зависимости от коннектора.

Для передачи значений именованных параметров можно использовать оператор =>. Левая часть — это имя параметра, правая часть — передаваемое значение.

Выполняемые команды предоставляются коннекторами, например команда optimize, которую предоставляют коннекторы Hive, Delta Lake и Iceberg. Например, если пользователь видит много небольших файлов в хранилище таблицы test_table в схеме test каталога example, он может использовать команду optimize, чтобы объединить все файлы меньше значения file_size_threshold. В результате файлов становится меньше, но они крупнее, что обычно повышает производительность запросов к данным в этих файлах:

ALTER TABLE example.test.test_table EXECUTE optimize(file_size_threshold => '16MB')

Примеры#

Переименовать таблицу users в people:

ALTER TABLE users RENAME TO people;

Переименовать таблицу users в people, если таблица users существует:

ALTER TABLE IF EXISTS users RENAME TO people;

Добавить столбец zip в таблицу users:

ALTER TABLE users ADD COLUMN zip varchar;

Добавить столбец zip в таблицу users со значением по умолчанию 90210:

ALTER TABLE users ADD COLUMN zip varchar DEFAULT '90210';

Добавить столбец zip в таблицу users, если таблица users существует, а столбец zip еще не существует:

ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS zip varchar;

Добавить столбец id первым столбцом в таблицу users:

ALTER TABLE users ADD COLUMN id varchar FIRST;

Добавить столбец zip после столбца country в таблицу users:

ALTER TABLE users ADD COLUMN zip varchar AFTER country;

Удалить столбец zip из таблицы users:

ALTER TABLE users DROP COLUMN zip;

Удалить столбец zip из таблицы users, если таблица users и столбец zip существуют:

ALTER TABLE IF EXISTS users DROP COLUMN IF EXISTS zip;

Переименовать столбец id в user_id в таблице users:

ALTER TABLE users RENAME COLUMN id TO user_id;

Переименовать столбец id в user_id в таблице users, если таблица users и столбец id существуют:

ALTER TABLE IF EXISTS users RENAME column IF EXISTS id to user_id;

Изменить тип столбца id на bigint в таблице users:

ALTER TABLE users ALTER COLUMN id SET DATA TYPE bigint;

Удалить ограничение NOT NULL для столбца id в таблице users:

ALTER TABLE users ALTER COLUMN id DROP NOT NULL;

Изменить владельца таблицы people на пользователя alice:

ALTER TABLE people SET AUTHORIZATION alice

Разрешить всем пользователям с ролью PUBLIC удалять и изменять таблицу people:

ALTER TABLE people SET AUTHORIZATION ROLE PUBLIC

Задать свойства таблицы (x = y) для таблицы people:

ALTER TABLE people SET PROPERTIES x = 'y';

Задать несколько свойств таблицы (foo = 123 и foo bar = 456) для таблицы people:

ALTER TABLE people SET PROPERTIES foo = 123, "foo bar" = 456;

Установить свойство таблицы x в значение по умолчанию для таблицы people:

ALTER TABLE people SET PROPERTIES x = DEFAULT;

См. также#

CREATE TABLE