Перейти к основному содержимому
Версия: 2.0.x

CREATE VIEW

CREATE VIEW создает логическое представление.

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

Информацию о материализованных представлениях, поддерживаемых Selena, см. в разделах Синхронные материализованные представления и Асинхронные материализованные представления.

Начиная с версии v1.5.2, Selena поддерживает безопасные представления. Вы можете ограничить доступ пользователей без привилегии SELECT на базовые таблицы, на которые ссылается представление, от выполнения запросов к представлению.

подсказка

Только пользователи с привилегией CREATE VIEW для конкретной базы данных могут выполнять эту операцию.

Синтаксис

CREATE [OR REPLACE] VIEW [IF NOT EXISTS]
[<database>.]<view_name>
(
<column_name>[ COMMENT 'column comment']
[, <column_name>[ COMMENT 'column comment'], ...]
)
[COMMENT 'view comment']
[SECURITY {NONE | INVOKER}]
AS <query_statement>

Параметры

ПараметрОписание
OR REPLACEЗаменить существующее представление.
databaseИмя базы данных, в которой находится представление.
view_nameИмя представления. Для ознакомления с соглашениями об именовании см. Системные ограничения.
column_nameИмя столбца(ов) в представлении. Обратите внимание, что столбцы в представлении и столбцы, запрашиваемые в query_statement, должны совпадать по количеству.
COMMENTКомментарий к столбцу в представлении или к самому представлению.
SECURITYУказывает контекст безопасности, который будет использоваться при проверке прав доступа во время вызова представления. Допустимые значения:
  • NONE(По умолчанию): Только пользователи с привилегией SELECT на представление могут запрашивать представление.
  • INVOKER: Только пользователи с привилегией SELECT как на представление, так и на базовые таблицы, на которые оно ссылается, могут запрашивать представление.
query_statementВыражение запроса, используемое для создания представления. Может быть любым выражением запроса, поддерживаемым Selena.

Примечания по использованию

  • Запрос к представлению требует наличия привилегии SELECT на представление и на соответствующие базовые таблицы.
  • Если выражение запроса, использованное для создания представления, не может быть выполнено из-за изменения схемы в базовых таблицах, Selena вернет ошибку при запросе к представлению.

Примеры

Пример 1: Создать представление с именем example_view в example_db с агрегирующим запросом к example_table.

CREATE VIEW example_db.example_view (k1, k2, k3, v1)
AS
SELECT c1 as k1, k2, k3, SUM(v1) FROM example_table
WHERE k1 = 20160112 GROUP BY k1,k2,k3;

Пример 2: Создать представление с именем example_view в базе данных example_db с агрегирующим запросом к таблице example_table и указать комментарии для представления и каждого столбца в нем.

CREATE VIEW example_db.example_view
(
k1 COMMENT 'first key',
k2 COMMENT 'second key',
k3 COMMENT 'third key',
v1 COMMENT 'first value'
)
COMMENT 'my first view'
AS
SELECT c1 as k1, k2, k3, SUM(v1) FROM example_table
WHERE k1 = 20160112 GROUP BY k1,k2,k3;

Пример 3: Создать безопасное представление с именем example_view в example_db с запросом к example_table. Представление разрешает запросы только от пользователей с привилегией SELECT на базовую таблицу example_table.

CREATE VIEW example_db.example_view (k1, k2, k3, v1)
COMMENT 'my secure view'
SECURITY INVOKER
AS
SELECT c1 as k1, k2, k3, SUM(v1) FROM example_table
WHERE k1 = 20160112 GROUP BY k1,k2,k3;

Связанные SQL