CREATE PROXY TABLE

Содержание раздела
  1. Связанные запросы
  2. Как работает запрос
    1. Регистрация запроса
    2. Обработка запроса
    3. Успешный результат
    4. Неуспешный результат
  3. Синтаксис
    1. Ключевое слово IF NOT EXISTS
    2. Ключевое слово PRIMARY KEY (column_name[, ... ])
    3. Ключевое слово DISTRIBUTED BY (column_name[, ... ])
    4. Ключевое слово DATASOURCE_TYPE ('datasource_name'[, ... ])
    5. Ключевое слово OPTIONS ('option=value[; ... ]')
    6. Ключевое слово LOGICAL_ONLY
  4. Варианты ответа
  5. Ограничения
    1. Ограничения выполнения
    2. Ограничения имен
    3. Другие ограничения
  6. Примеры
    1. Постоянная таблица в указанном датасорсе
    2. Постоянная таблица в случайном датасорсе из сконфигурированных
    3. Временная таблица в случайном датасорсе из указанных
    4. Временная таблица в псевдослучайном датасорсе из сконфигурированных
    5. Временная таблица в псевдослучайном датасорсе из указанных

Поддерживается в версиях: 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.

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

Регистрация запроса

Каждое создание таблицы (кроме временных таблиц) записывается в журнал, доступный с помощью запроса 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). Доступные параметры:

Ключевое слово 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"
}'