CREATE VIEW

Содержание раздела
  1. Как работает запрос
    1. Регистрация запроса
    2. Обработка запроса
    3. Успешный результат
    4. Неуспешный результат
  2. Синтаксис
    1. Ключевое слово AS SELECT query
  3. Варианты ответа
  4. Ограничения
    1. Ограничения выполнения
    2. Ограничения имен
    3. Ограничения SELECT-подзапроса
    4. Другие ограничения
  5. Примеры
    1. Представление на основе логической таблицы
    2. Представление с системными столбцами на основе снапшот-таблицы
    3. Представление на основе материализованного представления
    4. Представление на основе прокси-таблицы
    5. Представление на основе standalone-таблицы
    6. Представление на основе соединения логической таблицы и standalone-таблицы

Поддерживается в версиях: 7.6 / 7.5 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.12 / 6.11 / 6.10 / 6.9 / 6.8 / 6.7 / 6.6 / 6.5 / 6.4 / 6.3 / 6.2 / 6.1 / 6.0 / 5.8 / 5.7 / 5.6 / 5.5 / 5.4 / 5.3 / 5.2 / 5.1 / 5.0.

Запрос создает или заменяет логическое представление в логической БД.

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

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

Каждое создание представления записывается в журнал, который доступен с помощью запроса GET_CHANGES.

Обработка запроса

Запрос попадает в очередь операций и обрабатывается в порядке его поступления в очередь.

Успешный результат

При успешном выполнении запроса система создает представление в логической схеме данных.

Неуспешный результат

При ошибке исполнения корректного запроса система блокирует все последующие DDL-запросы в логической БД. О снятии такой блокировки см. в разделе Снятие блокировки DDL-запросов.

Синтаксис

Создание логического представления:

CREATE VIEW [db_name.]view_name AS SELECT query

Создание логического представления с заменой существующего представления, если такое есть:

CREATE OR REPLACE VIEW [db_name.]view_name AS SELECT query

Параметры:

db_name

Имя логической базы данных, в которой создается или заменяется логическое представление. Опционально, если выбрана логическая БД, используемая по умолчанию.

view_name

Имя создаваемого или заменяемого представления. Должно быть уникально среди сущностей логической БД.

Ключевое слово AS SELECT query

Задает SELECT-подзапрос, на котором строится логическое представление.

Подзапрос может обращаться к любым столбцам задействованных сущностей, включая системные sys_from, sys_to и sys_op, и имеет ограничения, перечисленные ниже.

Чтобы системные столбцы источника были доступны через представление, перечислите их в запросе явно. При использовании только * они не будут видны.

Варианты ответа

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Ограничения

Ограничения выполнения

Ограничения имен

Ограничения SELECT-подзапроса

  • SELECT-подзапрос не может содержать:
  • Ключевое слово DATASOURCE_TYPE в SELECT-подзапросе игнорируется.

Другие ограничения

  • Информационная схема обновляется асинхронно, поэтому созданное представление может не сразу появиться в информационной схеме.
  • Системные столбцы источника доступны через представление, если только они явно указаны в запросе на создание/изменение представления.

Примеры

Представление на основе логической таблицы

CREATE VIEW marketing.stores_by_sold_products AS
  SELECT store_id, SUM(product_units) AS product_amount
  FROM marketing.sales
  GROUP BY store_id
  ORDER BY product_amount DESC
  LIMIT 20

Представление с системными столбцами на основе снапшот-таблицы

CREATE VIEW marketing.stores_snapshot_with_sys_columns AS
  SELECT *, sys_from, sys_to
  FROM marketing.stores_snapshot

Представление на основе материализованного представления

CREATE VIEW marketing.view_based_on_matview AS 
  SELECT * from matviews_for_ext_source.matview_with_snapshot

Представление на основе прокси-таблицы

CREATE VIEW marketing.payments_by_code AS
  SELECT p.type_code, SUM(p.amount) AS amount, p.currency_code 
  FROM marketing.payments_proxy AS p 
  GROUP BY p.type_code, p.currency_code

Представление на основе standalone-таблицы

-- представление на основе standalone-таблицы, на которую указывает внешняя readable-таблица payments_ext_read_adqm
CREATE VIEW marketing.payments_by_agreement AS
  SELECT p.agreement_id, p.code, SUM(p.amount) AS amount, p.currency_code 
  FROM marketing.payments_ext_read_adqm AS p 
  GROUP BY p.agreement_id, p.code, p.currency_code

Представление на основе соединения логической таблицы и standalone-таблицы

-- представление на основе логической таблицы clients и standalone-таблицы, на которую указывает 
--   внешняя readable-таблица agreements_ext_read_adp
CREATE VIEW marketing.agreements_with_client_info AS
  SELECT a.id, a.client_id, c.last_name, c.first_name, c.patronymic_name 
  FROM marketing.agreements_ext_read_adp AS a
  LEFT JOIN marketing.clients AS c
    ON a.client_id = c.id