CREATE PROXY TABLE
Содержание раздела
Поддерживается в версиях: 6.7 / 6.6.
Запрос создает прокси-таблицу с размещением в указанном датасорсе.
Прокси-таблицу также можно создать с помощью запроса CREATE TABLE с указанием ключевого слова OPTIONS. Изменить прокси-таблицу можно запросами ALTER TABLE
, удалить — запросом DROP TABLE.
Результат выполнения
При успешном выполнении запроса система создает прокси-таблицу в логической базе данных и соответствующую ей физическую таблицу в указанном датасорсе.
Если в датасорсе уже есть физическая таблица с таким же именем, как у прокси-таблицы, она будет удалена перед созданием новой физической таблицы, связанной с прокси-таблицей.
Как работает запрос
Запрос попадает в очередь операций и обрабатывается в порядке его поступления в очередь. Каждое создание таблицы записывается в журнал, который можно посмотреть с помощью запроса GET_CHANGES.
Если при исполнении корректного запроса возникла ошибка, система блокирует все последующие DDL-запросы в логической базе данных. О снятии такой блокировки см. в разделе Снятие блокировки DDL-запросов.
Синтаксис
CREATE PROXY TABLE [IF NOT EXISTS] [db_name.]table_name (
column_name_1 datatype_1 [ NULL | NOT NULL ],
...
column_name_N datatype_N [ NULL | NOT NULL ],
PRIMARY KEY (column_list_1)
)
[DISTRIBUTED BY (column_list_2)]
[DATASOURCE_TYPE (proxy_datasource_alias)]
[LOGICAL_ONLY]
Параметры:
db_name
-
Имя логической базы данных, в которой создается таблица. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name
-
Имя создаваемой прокси-таблицы, уникальное среди логических сущностей логической БД.
column_name_N
-
Имя столбца таблицы.
datatype_N
-
Тип данных столбца
column_name_N
. Возможные значения см. в разделе Логические типы данных.
Ключевое слово IF NOT EXISTS
Ключевое слово IF NOT EXISTS
включает проверку наличия прокси-таблицы до попытки создания. Если ключевое слово указано в запросе, успешный ответ возвращается при наличии или успешном создании прокси-таблицы, иначе — только при успешном создании прокси-таблицы.
Ключевое слово PRIMARY KEY
Ключевое слово PRIMARY KEY
задает список столбцов, входящих в первичный ключ таблицы (column_list_1
).
Ключевое слово обязательно для всех типов датасорсов, кроме ADP.
Ключевое слово DISTRIBUTED BY
Ключевое слово DISTRIBUTED BY
задает список столбцов, входящих в ключ шардирования таблицы (column_list_2
). В качестве значения можно указать любые столбцы из числа столбцов первичного ключа (column_list_1
).
Ключевое слово обязательно для датасорсов всех типов, кроме ADP.
Ключевое слово DATASOURCE_TYPE
Ключевое слово DATASOURCE_TYPE
задает имя датасорса для размещения данных прокси-таблицы (proxy_datasource_alias
). Значение указывается в одинарных кавычках.
В отличие от обычной логической таблицы, прокси-таблица всегда размещается в одном датасорсе, поэтому DATASOURCE_TYPE
для прокси-таблицы задает имя только одного датасорса.
Ключевое слово обязательно, если хранилище данных содержит более одного датасорса.
Ключевое слово LOGICAL_ONLY
Ключевое слово LOGICAL_ONLY
позволяет создать таблицу только в логической схеме данных, без обновления физической схемы данных.
Если ключевое слово не указано, таблицу создается на логическом и физическом уровнях.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
Ограничения выполнения
- Выполнение запроса недоступно, если есть незавершенная операция записи или установлен запрет на изменение сущностей.
Ограничения имен
- Имена таблицы и ее столбцов должны соответствовать требованиям, описанным в разделе Соглашения об именах.
- Имена столбцов должны быть уникальны в рамках прокси-таблицы.
Другие ограничения
- Первичный ключ, если он указан, должен включать все столбцы ключа шардирования.
- Информационная схема обновляется асинхронно, поэтому созданная таблица может не сразу появиться в информационной схеме.
Пример
Создание прокси-таблицы с размещением ее данных в датасорсе adp
:
CREATE PROXY TABLE marketing.payments_proxy (
id BIGINT NOT NULL,
agreement_id BIGINT,
type_code VARCHAR(16),
amount DOUBLE,
currency_code VARCHAR(3),
description VARCHAR,
PRIMARY KEY (id)
)
DISTRIBUTED BY (id)
DATASOURCE_TYPE ('adp')