ALTER TABLE ADD DATASOURCE
Содержание раздела
Поддерживается в версиях: 7.8 / 7.7 / 7.6 / 7.5 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.12 / 6.11 / 6.10.
Запрос расширяет таблицу на новый для нее датасорс:
- Обновляет метаинформацию таблицы, добавляя датасорс в список датасорсов таблицы.
- Если таблица содержит данные, копирует их в новый датасорс из наиболее оптимального источника (датасорса-донора).
Запрос доступен для таблиц:
Похожий процесс выполняется при присоединении датасорса через /attach с datasourceDonor и logicalOnly=false. Но, в отличие от /attach, ALTER TABLE ADD DATASOURCE игнорирует опцию recover.mode.logical.only и копирует данные в новый датасорс независимо от ее значения.
Поддерживаемые датасорсы
Таблицу можно расширить на датасорсы тех типов, которые перечислены в таблице ниже.
| Таблица | Распределение данных таблицы | Типы датасорсов, на которые можно расширить таблицу |
|---|---|---|
| Обычная логическая таблица | Нет данных | Любые |
| Включает ADB и (или) ADP | ADB, ADP | |
| Только ADQM и (или) ADG | Никакие | |
| Партиционированная таблица | — (неприменимо, так как не содержит данные) | ADP |
| Партиция, снапшот-таблица | Нет данных или ADP | ADP |
Партиции, партиционированные таблицы и снапшот-таблицы могут размещаться только в 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'[, ... ])
Задает имена датасорсов-источников (доноров), из которых копируются данные для наполнения таблицы в новом датасорсе.
Если ключевое слово не указано, система выбирает наиболее оптимальный датасорс в качестве источника.
Ключевое слово LOGICAL_ONLY
Позволяет расширить таблицу на датасорс только на логическом уровне (в логической схеме данных), не обновляя физическую схему в хранилище данных.
Если ключевое слово не указано, таблица расширяется на датасорс на логическом и физическом уровнях.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
- Выполнение запроса недоступно в следующих случаях:
- таблица участвует в незавершенной операции записи;
- в логической БД открыта дельта;
- в логической БД установлен запрет на изменение сущностей.
- Параллельное выполнение
ALTER TABLE ADD DATASOURCEи ERASE DELTA может привести к неконсистентности данных. - Запрос игнорирует опцию таблицы
recover.mode.logical.only=trueи копирует данные таблицы в новый датасорс. - Таблицу можно расширить на датасорс:
- любого типа — для обычной логической таблицы без данных;
- ADB, ADP — для обычной логической таблицы с данными в другом датасорсе ADB/ADP;
- ADP — для партиционированной таблицы, партиции или снапшот-таблицы.
- Информационная схема обновляется асинхронно, поэтому список датасорсов таблицы может не сразу обновиться в информационной схеме.
Примеры
Расширение таблицы на датасорс без ключевых слов
Расширение логической таблицы указанной логической БД:
ALTER TABLE marketing.clients
ADD DATASOURCE 'adp2'
Расширение снапшот-таблицы логической БД, выбранной по умолчанию:
USE marketing;
ALTER TABLE sales_snapshot
ADD DATASOURCE 'adp3';
Расширение таблицы на датасорс с 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