CREATE PROXY TABLE
Содержание раздела
Поддерживается в версиях: 7.2 / 7.1 / 7.0 / 6.12 / 6.11 / 6.10 / 6.9 / 6.8 / 6.7 / 6.6.
Запрос создает прокси-таблицу.
Прокси-таблица размещается в датасорсе, выбранном в зависимости от конфигурации, ключевого слова DATASOURCE_TYPE и параметра queryId.
Прокси-таблицу также можно создать запросом CREATE TABLE с ключевым словом OPTIONS.
Связанные запросы
- ALTER TABLE ADD COLUMN,
- ALTER TABLE RENAME COLUMN,
- ALTER TABLE DROP COLUMN,
- ALTER TABLE RENAME,
- DROP TABLE.
Как работает запрос
Регистрация запроса
Каждое создание таблицы (кроме временных таблиц) записывается в журнал, доступный с помощью запроса GET_CHANGES.
Обработка запроса
Запрос попадает в очередь операций и обрабатывается в порядке его поступления в очередь.
Успешный результат
При успешном выполнении запроса система создает прокси-таблицу в логической базе данных и соответствующую ей физическую таблицу в целевом датасорсе.
Если в датасорсе есть физическая таблица с таким же именем, как у прокси-таблицы, она будет удалена при создании прокси-таблицы.
Неуспешный результат
При ошибке исполнения корректного запроса система блокирует все последующие DDL-запросы в логической БД. О снятии такой блокировки см. в разделе Снятие блокировки DDL-запросов.
Синтаксис
CREATE PROXY TABLE [ IF NOT EXISTS ] [db_name.]table_name (
column_name data_type [ NULL | NOT NULL ],
[ ... , ]
[ PRIMARY KEY (column_name[, ... ]) ]
)
[ DISTRIBUTED BY (column_name[, ... ]) ]
[ DATASOURCE_TYPE ('datasource_name'[, ... ]) ]
[ OPTIONS ('set.entity.ttl.ms=ttl_value;') ]
[ LOGICAL_ONLY ]
Параметры:
db_name
-
Имя логической базы данных, в которой создается таблица. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name
-
Имя создаваемой прокси-таблицы, уникальное среди логических сущностей логической БД.
column_name
-
Имя столбца таблицы.
data_type
-
Тип данных столбца
column_name
. Возможные значения см. в разделе Логические типы данных.
Ключевое слово IF NOT EXISTS
Включает проверку наличия прокси-таблицы до попытки создания. Если ключевое слово указано в запросе, успешный ответ возвращается при наличии или успешном создании прокси-таблицы, иначе — только при успешном создании прокси-таблицы.
Ключевое слово PRIMARY KEY (column_name[, ... ])
Задает список столбцов, входящих в первичный ключ таблицы. Обязательно для датасорсов типа ADQM и ADG, опционально — для ADP и ADB.
Ключевое слово DISTRIBUTED BY (column_name[, ... ])
Задает список столбцов, входящих в ключ шардирования таблицы. Обязательно для датасорсов типа ADQM и ADG, опционально — для ADP и ADB.
Если указано, все столбцы ключа шардирования должны присутствовать в первичном ключе.
Ключевое слово DATASOURCE_TYPE ('datasource_name'[, ... ])
Задает список имен датасорсов, из которых выбирается датасорс для размещения прокси-таблицы. Имена должны соответствовать конфигурации.
Ключевое слово OPTIONS ('option=value[; ... ]')
Задает дополнительные параметры (option
) и их значения (value
). Доступные параметры:
set.entity.ttl.ms
— срок жизни временной прокси-таблицы в миллисекундах. Если не задан, таблица считается постоянной.
Ключевое слово LOGICAL_ONLY
Позволяет создать таблицу только на логическом уровне (в логической схеме данных), не обновляя физическую схему в хранилище данных.
Если ключевое слово не указано, таблица создается на логическом и физическом уровнях.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
Ограничения выполнения
- Выполнение запроса недоступно, если установлен запрет на изменение сущностей.
Ограничения имен
- Имена таблицы и ее столбцов должны соответствовать требованиям, описанным в разделе Соглашения об именах.
- Имена столбцов должны быть уникальны в рамках прокси-таблицы.
Другие ограничения
- Первичный ключ, если он указан, должен включать все столбцы ключа шардирования.
- Информационная схема обновляется асинхронно, поэтому созданная таблица может не сразу появиться в информационной схеме.
- HTTP-запросы с одинаковым значением
queryId
и одинаковым списком датасорсов вDATASOURCE_TYPE
/конфигурации создают прокси-таблицы в одном датасорсе, только если он активен при исполнении всех таких запросов.
Примеры
Постоянная таблица в указанном датасорсе
CREATE PROXY TABLE marketing.payments_proxy_in_specified_ds (
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')
Постоянная таблица в случайном датасорсе из сконфигурированных
CREATE PROXY TABLE marketing.payments_proxy_in_any_configured_ds (
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
(см. полный HTTP-запрос ниже):
CREATE PROXY TABLE marketing.payments_proxy_temp_in_any_listed_ds (
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', 'adp2')
OPTIONS ('set.entity.ttl.ms=120000;')
HTTP-запрос для создания прокси-таблицы payments_proxy_temp_in_any_listed_ds
curl -X 'POST' \
'http://localhost:9090/api/v1/datamarts/query' \
-H 'x-request-id: 18ab9a21-fe66-4cdb-8bfd-e43cad2e8d96' \
-H 'Content-Type: application/json' \
-d '{
"query": "CREATE PROXY TABLE marketing.payments_proxy_temp_in_any_listed_ds (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', 'adp2') OPTIONS ('set.entity.ttl.ms=120000;')"
}'
Временная таблица в псевдослучайном датасорсе из сконфигурированных
Временная прокси-таблица без первичного ключа и ключа шардирования с размещением в псевдослучайном активном датасорсе из сконфигурированных (без DATASOURCE_TYPE
, но с queryId; см. полный HTTP-запрос ниже):
CREATE PROXY TABLE marketing.payments_proxy_temp_in_seed_configured_ds (
id BIGINT NOT NULL,
agreement_id BIGINT,
type_code VARCHAR(16),
amount DOUBLE,
currency_code VARCHAR(3),
description VARCHAR
)
OPTIONS ('set.entity.ttl.ms=120000;')
HTTP-запрос для создания прокси-таблицы payments_proxy_temp_in_seed_configured_ds
curl -X 'POST' \
'http://localhost:9090/api/v1/datamarts/query' \
-H 'x-request-id: a9a8300e-32fc-4b02-a10b-6d7d553985ad' \
-H 'Content-Type: application/json' \
-d '{
"query": "CREATE PROXY TABLE marketing.payments_proxy_temp_in_seed_configured_ds (id BIGINT NOT NULL, agreement_id BIGINT, type_code VARCHAR(16), amount DOUBLE, currency_code VARCHAR(3), description VARCHAR) OPTIONS ('set.entity.ttl.ms=120000;')",
"queryId": "28258592"
}'
Временная таблица в псевдослучайном датасорсе из указанных
Временная прокси-таблица без первичного ключа и ключа шардирования с размещением в псевдослучайном активном датасорсе из указанных (с queryId
и списком датасорсов в DATASOURCE_TYPE
; см. полный HTTP-запрос ниже):
CREATE PROXY TABLE marketing.payments_proxy_temp_in_seed_listed_ds (
id BIGINT NOT NULL,
agreement_id BIGINT,
type_code VARCHAR(16),
amount DOUBLE,
currency_code VARCHAR(3),
description VARCHAR
)
DATASOURCE_TYPE ('adp', 'adp2')
OPTIONS ('set.entity.ttl.ms=120000;')
HTTP-запрос для создания прокси-таблицы payments_proxy_temp_in_seed_listed_ds
curl -X 'POST' \
'http://localhost:9090/api/v1/datamarts/query' \
-H 'x-request-id: 5ae7018b-c1d8-49ed-a344-d68693e710a0' \
-H 'Content-Type: application/json' \
-d '{
"query": "CREATE PROXY TABLE marketing.payments_proxy_temp_in_seed_listed_ds (id BIGINT NOT NULL, agreement_id BIGINT, type_code VARCHAR(16), amount DOUBLE, currency_code VARCHAR(3), description VARCHAR) DATASOURCE_TYPE ('adp', 'adp2') OPTIONS ('set.entity.ttl.ms=120000;')",
"queryId": "3456878"
}'