ALTER TABLE ADD DATASOURCE
Содержание раздела
Поддерживается в версиях: 7.5 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.12 / 6.11 / 6.10.
Запрос расширяет логическую таблицу на новый датасорс — добавляет его в список датасорсов таблицы в логической схеме данных и, если в таблице есть данные, копирует их в новый датасорс из наиболее оптимального источника (датасорса-донора).
Запрос доступен для всех видов логических таблиц: обычных логических таблиц, партиционированных таблиц и партиций.
Какие датасорсы можно добавить
Для таблицы можно добавить датасорсы следующих типов, перечисленных в таблице ниже.
| Таблица | Распределение данных таблицы | Какие датасорсы можно добавить |
|---|---|---|
| Обычная логическая таблица, партиция | Нет данных | Любые |
| Включает ADB и (или) ADP | ADB, ADP | |
| Только ADQM и (или) ADG | Никакие | |
| Партиционированная таблица | — (неприменимо, так как не содержит данные) | ADP |
Как выбирается датасорс-источник
Система копирует данные таблицы в добавляемый датасорс из наиболее оптимального источника (датасорса-донора), выбранного из датасорсов:
- указанных в запросе с помощью ключевого слова USING — если они указаны в запросе;
- сконфигурированных датасорсов — иначе.
Для партиционированных таблиц выбор источника пропускается, так как их датасорсы не хранят данные долговременно и используются только для трансфера данных в партиции.
Наиболее оптимальным считается включенный датасорс с данными сущности и наивысшим приоритетом согласно таблице ниже. Из нескольких одинаково подходящих выбирается случайный.
| Тип добавляемого датасорса | Порядок выбора типа датасорса-источника |
|---|---|
| ADP | 1. ADP, 2. ADB. Предпочтение отдается датасорсу без retention-правил для целевой таблицы |
| ADB | 1. ADB, 2. ADP. Предпочтение отдается датасорсу без retention-правил для целевой таблицы |
Обработка запроса
Запрос попадает в очередь операций и обрабатывается в порядке его поступления в очередь. Каждое изменение таблицы записывается в журнал, который можно посмотреть с помощью запроса GET_CHANGES.
При ошибке исполнения корректного запроса система блокирует все последующие DDL-запросы в логической БД. О снятии такой блокировки см. в разделе Снятие блокировки DDL-запросов.
Результат выполнения
При успешном выполнении запроса система:
- Обновляет список датасорсов таблицы в логической схеме данных.
- Создает в добавляемом датасорсе необходимые физические таблицы.
- (Только для обычных логических таблиц и партиций) Наполняет физические таблицы данными в полном соответствии с выбранным датасорсом-источником.
Синтаксис
ALTER TABLE [db_name.]table_name
ADD DATASOURCE [IF NOT EXISTS] 'destination_datasource'
[USING ('source_datasource'[, ... ])]
[LOGICAL_ONLY]
Параметры:
db_name-
Имя логической базы данных, которой принадлежит расширяемая таблица. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name-
Имя расширяемой логической таблицы. Возможные значения:
- имя обычной логической таблицы,
- имя партиционированной таблицы,
- имя партиции.
destination_datasource-
Имя датасорса, добавляемого для таблицы. Имя должно быть указано в соответствии с конфигурацией.
Ключевое слово IF NOT EXISTS
Включает проверку наличия датасорса до попытки его добавления для таблицы. Если ключевое слово указано в запросе, успешный ответ возвращается при наличии или успешном добавлении датасорса, иначе — только при успешном добавлении датасорса.
Ключевое слово USING ('source_datasource'[, ... ])
Задает имена датасорсов-источников (доноров), из которых выбираются данные для наполнения таблицы в добавляемом датасорсе. Имена должны быть указаны в соответствии с конфигурацией.
Если ключевое слово не указано, система выбирает наиболее оптимальный датасорс в качестве источника.
USING игнорируется для партиционированных таблиц, так как они не содержат данные.
Ключевое слово LOGICAL_ONLY
Позволяет добавить датасорс только на логическом уровне (в логическую схему данных), не обновляя физическую схему в хранилище данных.
Если ключевое слово не указано, датасорс добавляется на логическом и физическом уровнях.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
- Выполнение запроса недоступно в следующих случаях:
- таблица участвует в незавершенной операции записи;
- в логической БД открыта дельта;
- в логической БД установлен запрет на изменение сущностей.
- Параллельное выполнение
ALTER TABLE ADD DATASOURCEи ERASE DELTA может привести к неконсистентности данных. - Можно добавить датасорсы:
- любого типа — для пустой обычной логической таблицы или партиции;
- ADB, ADP — для непустой обычной логической таблицы или партиции с данными в другом датасорсе ADB/ADP;
- 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