ALTER TABLE ADD DATASOURCE

Содержание раздела
  1. Поддерживаемые СУБД
  2. Как работает запрос
  3. Порядок выбора датасорса-источника
  4. Результат выполнения
  5. Синтаксис
    1. Ключевое слово IF NOT EXISTS
    2. Ключевое слово USING
    3. Ключевое слово LOGICAL_ONLY
  6. Варианты ответа
  7. Ограничения
  8. Примеры
    1. Добавление датасорса без ключевых слов
    2. Добавление датасорса с ключевым словом USING
    3. Добавление датасорса с ключевым словом IF NOT EXISTS
    4. Добавление датасорса с ключевым словом LOGICAL_ONLY

Поддерживается в версиях:  6.12 / 6.11 / 6.10.

Запрос расширяет логическую таблицу на указанный датасорс — размещает данные таблицы в этом датасорсе и обновляет список датасорсов таблицы в логической схеме данных. Запрос доступен для обычных логических таблиц и партиций.

Данные для наполнения таблицы в новом датасорсе выбираются из наиболее оптимального датасорса-источника среди указанных в запросе или доступных в окружении.

Поддерживаемые СУБД

Запрос позволяет расширить логическую таблицу на следующие СУБД (типы датасорсов):

  • любые СУБД — если в таблице нет данных;
  • ADB и (или) ADP — если в таблице есть данные и они размещены хотя бы в одном датасорсе типа ADB или ADP. При этом возможны любые комбинации этих типов датасорсов в качестве источников и приемников данных: ADB → ADB, ADB → ADP, ADP → ADP, ADP → ADB.

Расширение таблицы с данными на новый датасорс невозможно, если ее данные размещены только в ADQM и (или) ADG.

Как работает запрос

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

Если при исполнении корректного запроса возникла ошибка, система блокирует все последующие DDL-запросы в логической базе данных. О снятии такой блокировки см. в разделе Снятие блокировки DDL-запросов.

Порядок выбора датасорса-источника

Перед добавлением данных таблицы в новый датасорс система выбирает наиболее оптимальный датасорс-источник данных. Источник выбирается:

  • из датасорсов, указанных в команде, — если в команде указано ключевое слово USING со списком датасорсов-источников;
  • из датасорсов, заданных в конфигурации, — иначе.

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

Тип добавляемого датасорса Порядок выбора типа датасорса-источника
ADP 1. ADP без retention-правил для целевой таблицы,
2. ADB без retention-правил для целевой таблицы,
3. ADP с retention-правилами для целевой таблицы,
4. ADB с retention-правилами для целевой таблицы
ADB 1. ADB без retention-правил для целевой таблицы,
2. ADP без retention-правил для целевой таблицы,
3. ADB с retention-правилами для целевой таблицы,
4. ADP с retention-правилами для целевой таблицы

Результат выполнения

При успешном выполнении запроса система обновляет список датасорсов таблицы в логической схеме данных, создает в целевом датасорсе необходимые физические таблицы и наполняет их данными в полном соответствии с датасорсом-источником.

Синтаксис

ALTER TABLE [db_name.]table_name
ADD DATASOURCE [IF NOT EXISTS] new_datasource
[USING (source_datasource_list)]
[LOGICAL_ONLY]

Параметры:

db_name

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

table_name

Имя расширяемой логической таблицы. Возможные значения:

  • имя обычной логической таблицы,
  • имя партиции.
new_datasource

Имя датасорса, добавляемого для таблицы. Имя указывается в соответствии с конфигурацией, в одинарных кавычках (например, 'adp2').

Ключевое слово IF NOT EXISTS

Ключевое слово IF NOT EXISTS включает проверку наличия датасорса до попытки его добавления для таблицы. Если ключевое слово указано в запросе, успешный ответ возвращается при наличии или успешном добавлении датасорса, иначе — только при успешном добавлении датасорса.

Ключевое слово USING

Ключевое слово USING задает имена датасорсов-источников source_datasource_list, из которых выбираются данные для наполнения таблицы в добавляемом датасорсе new_datasource. Имена указываются в соответствии с конфигурацией и перечисляются через запятую, каждое имя указывается в одинарных кавычках — например, 'adp', 'adp2'.

Если ключевое слово не указано, система выбирает наиболее оптимальный датасорс в качестве источника данных.

Ключевое слово LOGICAL_ONLY

Ключевое слово LOGICAL_ONLY позволяет добавить для таблицы датасорс только в логической схеме данных, без обновления физической схемы данных.

Если ключевое слово не указано, датасорс добавляется на логическом и физическом уровнях.

Варианты ответа

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Ограничения

  • Выполнение запроса недоступно, если таблица участвует в незавершенной операции записи или в логической БД есть открытая дельта, или в логической БД установлен запрет на изменение сущностей.
  • Добавление датасорса для таблицы доступно, если в таблице нет данных или данные таблицы размещены хотя бы в одном датасорсе типа ADB или ADP и добавляемый датасорс также имеет тип ADB или ADP.
  • Информационная схема обновляется асинхронно, поэтому датасорс таблицы может не сразу добавиться в информационную схему.

Примеры

Добавление датасорса без ключевых слов

Добавление датасорса для логической таблицы указанной логической БД:

ALTER TABLE marketing.clients
ADD DATASOURCE 'adp2'

Добавление датасорса для логической таблицы логической БД, выбранной по умолчанию:

USE marketing_new;

ALTER TABLE sales
ADD DATASOURCE 'adb';

Добавление датасорса с ключевым словом USING

ALTER TABLE marketing.clients
ADD DATASOURCE 'adp2'
USING ('adp')

Добавление датасорса с ключевым словом IF NOT EXISTS

ALTER TABLE marketing.clients
ADD DATASOURCE IF NOT EXISTS 'adp2'

Добавление датасорса с ключевым словом LOGICAL_ONLY

ALTER TABLE marketing_new.sales
ADD DATASOURCE 'adb2'
LOGICAL_ONLY