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 — формат данных, в котором будут записаны данные.
  • 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);