ALTER TABLE
При помощи команды ALTER TABLE
можно изменить состав колонок и дополнительные параметры таблицы. В одной команде можно указать несколько действий. В общем случае команда ALTER TABLE
выглядит так:
ALTER TABLE table_name action1, action2, ..., actionN;
action
— это любое действие по изменению таблицы, из описанных ниже.
Изменение состава колонок
YDB поддерживает возможность добавлять столбцы в таблицу, а также удалять неключевые колонки из таблицы.
ADD COLUMN
— добавляет столбец с указанными именем и типом. Приведенный ниже код добавит к таблице episodes
столбец is_deleted
с типом данных Bool
.
ALTER TABLE episodes ADD COLUMN is_deleted Bool;
DROP COLUMN
— удаляет столбец с указанным именем. Приведенный ниже код удалит столбец is_deleted
из таблицы episodes
.
ALTER TABLE episodes DROP column is_deleted;
Добавление или удаление вторичного индекса
ADD INDEX
— добавляет индекс с указанным именем и типом для заданного набора колонок. Приведенный ниже код добавит глобальный индекс с именем title_index
для колонки title
.
ALTER TABLE `series` ADD INDEX `title_index` GLOBAL ON (`title`);
Могут быть указаны все параметры индекса, описанные в команде CREATE TABLE
Удаление индекса:
DROP INDEX
— удаляет индекс с указанным именем. Приведенный ниже код удалит индекс с именем title_index
.
ALTER TABLE `series` DROP INDEX `title_index`;
Также добавить или удалить вторичный индекс можно с помощью команды table index YDB CLI.
Переименование вторичного индекса
RENAME INDEX
— переименовывает индекс с указанным именем.
Если индекс с новым именем существует, будет возвращена ошибка.
Пример переименования индекса:
ALTER TABLE `series` RENAME INDEX `title_index` TO `title_index_new`;
Добавление или удаление потока изменений
ADD CHANGEFEED <name> WITH (option = value[, ...])
— добавляет поток изменений (changefeed) с указанным именем и параметрами.
Параметры потока изменений
MODE
— режим работы. Указывает, что именно будет записано в поток при каждом изменении данных в таблице.KEYS_ONLY
— будут записаны только компоненты первичного ключа и признак изменения.UPDATES
— будут записаны значения изменившихся столбцов, получившиеся в результате изменения.NEW_IMAGE
— будут записаны значения всех столбцов, получившиеся в результате изменения.OLD_IMAGE
— будут записаны значения всех столбцов, предшествующие изменению.NEW_AND_OLD_IMAGES
- комбинация режимовNEW_IMAGE
иOLD_IMAGE
. Будут записаны значения всех столбцов до и в результате изменения.
FORMAT
— формат данных, в котором будут записаны данные.JSON
— структура записи приведена на странице описания changefeed.
VIRTUAL_TIMESTAMPS
— включение-выключение виртуальных меток времени. По умолчанию выключено.RETENTION_PERIOD
— время хранения записей. Тип значения —Interval
, значение по умолчанию — 24 часа (Interval('PT24H')
).
Приведенный ниже код добавит поток изменений с именем updates_feed
, в который будут выгружаться значения изменившихся столбцов таблицы в формате JSON:
ALTER TABLE `series` ADD CHANGEFEED `updates_feed` WITH (
FORMAT = 'JSON',
MODE = 'UPDATES'
);
Записи в таком потоке изменений будут храниться в течение 24 часов (значение по умолчанию). Код из следующего примера создаст поток изменений с хранением записей в течение 12 часов:
ALTER TABLE `series` ADD CHANGEFEED `updates_feed` WITH (
FORMAT = 'JSON',
MODE = 'UPDATES',
RETENTION_PERIOD = Interval('PT12H')
);
Пример создания потока изменений с включенными виртуальными метками времени:
ALTER TABLE `series` ADD CHANGEFEED `updates_feed` WITH (
FORMAT = 'JSON',
MODE = 'UPDATES',
VIRTUAL_TIMESTAMPS = TRUE
);
DROP CHANGEFEED
— удаляет поток изменений с указанным именем. Приведенный ниже код удалит changefeed с именем updates_feed
:
ALTER TABLE `series` DROP CHANGEFEED `updates_feed`;
Переименование таблицы
ALTER TABLE old_table_name RENAME TO new_table_name;
Если таблица с новым именем существует, будет возвращена ошибка. Возможность транзакционной подмены таблицы под нагрузкой поддерживается специализированными методами в CLI и SDK.
Если в YQL запросе содержится несколько команд ALTER TABLE ... RENAME TO ...
, то каждая будет выполнена в режиме автокоммита в отдельной транзакции. С точки зрения внешнего процесса, таблицы будут переименованы последовательно одна за другой. Чтобы переименовать несколько таблиц в одной транзакции, используйте специализированные методы, доступные в CLI и SDK.
Переименование может использоваться для перемещения таблицы из одной директории внутри БД в другую, например:
ALTER TABLE `table1` RENAME TO `/backup/table1`;
Изменение групп колонок
ADD FAMILY
— создаёт новую группу колонок в таблице. Приведенный ниже код создаст в таблице series_with_families
группу колонок family_small
.
ALTER TABLE series_with_families ADD FAMILY family_small (
DATA = "ssd",
COMPRESSION = "off"
);
При помощи команды ALTER COLUMN
можно изменить группу колонок для указанной колонки. Приведенный ниже код для колонки release_date
в таблице series_with_families
сменит группу колонок на family_small
.
ALTER TABLE series_with_families ALTER COLUMN release_date SET FAMILY family_small;
Две предыдущие команды из листингов 8 и 9 можно объединить в один вызов ALTER TABLE
. Приведенный ниже код создаст в таблице series_with_families
группу колонок family_small
и установит её для колонки release_date
.
ALTER TABLE series_with_families
ADD FAMILY family_small (
DATA = "ssd",
COMPRESSION = "off"
),
ALTER COLUMN release_date SET FAMILY family_small;
При помощи команды ALTER FAMILY
можно изменить параметры группы колонок. Приведенный ниже код для группы колонок default
в таблице series_with_families
сменит тип хранилища на hdd
:
ALTER TABLE series_with_families ALTER FAMILY default SET DATA "hdd";
Примечание
Доступные типы устройств хранения зависят от конфигурации кластера YDB.
Могут быть указаны все параметры группы колонок, описанные в команде CREATE TABLE
Изменение дополнительных параметров таблицы
Большинство параметров таблицы в YDB, приведенных на странице описания таблицы, можно изменить командой ALTER
.
В общем случае команда для изменения любого параметра таблицы выглядит следующим образом:
ALTER TABLE table_name SET (key = value);
key
— имя параметра, value
— его новое значение.
Например, такая команда выключит автоматическое партиционирование таблицы:
ALTER TABLE series SET (AUTO_PARTITIONING_BY_SIZE = DISABLED);
Сброс дополнительных параметров таблицы
Некоторые параметры таблицы в YDB, приведенные на странице описания таблицы, можно сбросить командой ALTER
.
Команда для сброса параметра таблицы выглядит следующим образом:
ALTER TABLE table_name RESET (key);
key
— имя параметра.
Например, такая команда сбросит (удалит) настройки TTL для таблицы:
ALTER TABLE series RESET (TTL);