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

Также добавить вторичный индекс можно с помощью команды table index YDB CLI.

Изменение параметров индекса

Индексы имеют параметры, зависящие от типа, которые можно настраивать. Глобальные индексы, синхронные или асинхронные, реализованы в виде скрытых таблиц, и их параметры автоматического партиционирования можно регулировать так же, как и настройки обычных таблиц.

Примечание

В настоящее время задание настроек партиционирования вторичных индексов при создании индекса не поддерживается ни в операторе ALTER TABLE ADD INDEX, ни в операторе CREATE TABLE INDEX.

ALTER TABLE <table_name> ALTER INDEX <index_name> SET <partitioning_setting_name> <value>;
ALTER TABLE <table_name> ALTER INDEX <index_name> SET (<partitioning_setting_name_1> = <value_1>, ...);

Примечание

Эти настройки нельзя вернуть к исходным.

  • <value> - новое значение параметра. Возможные значения включают:
    • ENABLED или DISABLED для параметров AUTO_PARTITIONING_BY_SIZE и AUTO_PARTITIONING_BY_LOAD
    • для остальных параметров — целое число типа Uint64

Пример

Код из следующего примера включает автоматическое партиционирование по нагрузке для индекса с именем title_index в таблице series и устанавливает ему минимальное количество партиций равным 5:

ALTER TABLE `series` ALTER INDEX `title_index` SET (
    AUTO_PARTITIONING_BY_LOAD = ENABLED,
    AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 5
);

Удаление индекса

DROP INDEX — удаляет индекс с указанным именем. Приведенный ниже код удалит индекс с именем title_index.

ALTER TABLE `series` DROP INDEX `title_index`;

Также удалить вторичный индекс можно с помощью команды table index YDB CLI.

Переименование индекса

RENAME INDEX — переименовывает индекс с указанным именем.

Если индекс с новым именем существует, будет возвращена ошибка.

Возможность атомарной замены индекса под нагрузкой поддерживается командой ydb table index rename YDB CLI и специализированными методами YDB SDK.

Пример переименования индекса:

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 — записывать данные в формате JSON.
  • VIRTUAL_TIMESTAMPS — включение-выключение виртуальных меток времени. По умолчанию выключено.
  • RETENTION_PERIOD — время хранения записей. Тип значения — Interval, значение по умолчанию — 24 часа (Interval('PT24H')).
  • TOPIC_MIN_ACTIVE_PARTITIONS — количество партиций топика. По умолчанию количество партиций топика равно количеству партиций таблицы.
  • INITIAL_SCAN — включение-выключение первоначального сканирования таблицы. По умолчанию выключено.

Приведенный ниже код добавит поток изменений с именем 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
);

Пример создания потока изменений с первоначальным сканированием:

ALTER TABLE `series` ADD CHANGEFEED `updates_feed` WITH (
    FORMAT = 'JSON',
    MODE = 'UPDATES',
    INITIAL_SCAN = 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);
Предыдущая
Следующая