СОЗДАТЬ ПРЕДСТАВЛЕНИЕ
Область применения: Databricks SQL Databricks Runtime
Конструирует виртуальную таблицу, не имеющую физических данных, на основе результирующего набора SQL-запроса.
ALTER VIEW
и DROP VIEW
изменяют только метаданные.
Синтаксис
CREATE [ OR REPLACE ] [ TEMPORARY ] VIEW [ IF NOT EXISTS ] view_name
[ column_list ]
[ schema_binding ]
[ COMMENT view_comment ]
[ TBLPROPERTIES clause ]
AS query
schema_binding
WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION }
column_list
( { column_alias [ COMMENT column_comment ] } [, ...] )
Параметры
OR REPLACE
Если представление с таким именем уже существует, оно заменяется. Чтобы заменить существующее представление, необходимо быть его владельцем.
Замена существующего представления не сохраняет привилегии, предоставленные в исходном представлении. Используйте ALTER VIEW для сохранения привилегий.
TEMPORARY
Временные представления TEMPORARY видны только в том сеансе, в котором они были созданы, и удаляются по его завершении.
ГЛОБАЛЬНЫЙ ВРЕМЕННЫЙ
Область применения: Databricks Runtime
Представления GLOBAL TEMPORARY привязаны к сохраненной системой временной схеме
global_temp
.IF NOT EXISTS
Создает представление, только если оно не существует. Если представление с таким именем уже существует, инструкция
CREATE VIEW
игнорируется.Можно указать не более одного предложения из числа
IF NOT EXISTS
иOR REPLACE
.-
Имя созданного представления. Имя временного представления не должно быть полным. Полное имя представления должно быть уникальным.
Представления, созданные в
hive_metastore
ней, могут содержать только буквенно-цифровые символы ASCII и символы подчеркивания (INVALID_SCHEMA_OR_RELATION_NAME). schema_binding
Область применения: Databricks Runtime 15.3 и выше
При необходимости указывает, как представление адаптируется к изменениям схемы запроса из-за изменений в определениях базовых объектов.
Это предложение не поддерживается для временных представлений или материализованных представлений.
ПРИВЯЗКА СХЕМЫ
Представление станет недействительным, если список столбцов запроса изменяется, за исключением следующих условий:
- Список столбцов содержит предложение "Звезда" и есть дополнительные столбцы. Эти дополнительные столбцы игнорируются.
- Тип одного или нескольких столбцов изменился таким образом, что позволяет безопасно приведения их к исходным типам столбцов с помощью неявных правил приведения.
Это поведение принимается по умолчанию.
С КОМПЕНСАЦИЕЙ СХЕМЫ
Представление станет недействительным, если список столбцов запросов изменяется, за исключением следующих условий:
- Список столбцов содержит предложение "Звезда" и есть дополнительные столбцы. Эти дополнительные столбцы игнорируются.
- Тип одного или нескольких столбцов изменился таким образом, чтобы они были приведение к исходным типам столбцов с помощью явных правил приведения ANSI.
С РАЗВИТИЕМ ТИПА СХЕМЫ
Представление будет принимать любые изменения типов в списке столбцов запросов в собственное определение, когда компилятор SQL обнаруживает такое изменение в ответ на ссылку на представление.
С РАЗВИТИЕМ СХЕМЫ
- Этот режим действует так, как
WITH SCHEMA TYPE EVOLUTION
, и также принимает изменения в именах столбцов или добавленных и удаленных столбцах, если представление не содержит явногоcolumn_list
. - Представление станет недействительным только в том случае, если запрос больше не может быть проанализирован, или необязательное представление
column_list
больше не соответствует количеству выражений вquery
списке выбора.
- Этот режим действует так, как
column_list
При необходимости помечает столбцы в результатах запроса представления. Если указан список столбцов, число псевдонимов столбцов должно совпадать с количеством выражений в запросе. Если список столбцов не указан, псевдонимы определяются на основе тела представления.
-
Псевдонимы столбцов должны быть уникальными.
column_comment
Необязательный
STRING
литерал, описывающий псевдоним столбца.
-
view_comment
Необязательный литерал, предоставляющий
STRING
комментарии на уровне представления.-
При необходимости задает одно или несколько свойств, определяемых пользователем.
AS query
Запрос, создающий представление на основе базовых таблиц или других представлений.
Примеры
-- Create or replace view for `experienced_employee` with comments.
> CREATE OR REPLACE VIEW experienced_employee
(id COMMENT 'Unique identification number', Name)
COMMENT 'View for experienced employees'
AS SELECT id, name
FROM all_employee
WHERE working_years > 5;
-- Create a temporary view `subscribed_movies`.
> CREATE TEMPORARY VIEW subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo
INNER JOIN members AS mb
ON mo.member_id = mb.id;
-- Create a view with schema binding (default)
> CREATE TABLE emp(name STRING, income INT);
> CREATE VIEW emp_v WITH SCHEMA BINDING AS SELECT * FROM emp;
– The view ignores adding a column to the base table
> ALTER TABLE emp ADD COLUMN bonus SMALLINT;
> SELECT * FROM emp_v;
name income
---- ------
-- The view tolerates narrowing the underlying type
> CREATE OR REPLACE TABLE emp(name STRING, income SMALLINT, bonus SMALLINT);
> SELECT typeof(income) FROM emp_v;
INTEGER
– The view does not tolerate widening the underlying type
CREATE OR REPLACE TABLE emp(name STRING, income BIGINT, bonus SMALLINT);
> SELECT typeof(income) FROM emp_v;
Error
– Create a view with SCHEMA COMPENSATION
> CREATE TABLE emp(name STRING, income SMALLINT, bonus SMALLINT);
> CREATE VIEW emp_v WITH SCHEMA COMPENSATION AS SELECT * FROM emp;
-- The view tolerates widening the underlying type but keeps its own signature fixed
CREATE OR REPLACE TABLE emp(name STRING, income INTEGER, bonus INTEGER);
> SELECT typeof(income) FROM emp_v;
INTEGER
-- The view does not tolerate dropping a needed column
ALTER TABLE emp DROP COLUMN bonus;
> SELECT * FROM emp_v;
Error
– Create a view with SCHEMA EVOLUTION
> CREATE TABLE emp(name STRING, income SMALLINT);
> CREATE VIEW emp_v WITH SCHEMA EVOLUTION AS SELECT * FROM emp;
-- The view picks up additional columns
> ALTER TABLE emp ADD COLUMN bonus SMALLINT
> SELECT * FROM emp_v;
name income bonus
---- ------ -----
-- The view picks up renamed columns as well
> ALTER TABLE emp RENAME COLUMN income TO salary SMALLINT;
> SELECT * FROM emp_v;
name salary bonus
---- ------ -----
-- The view picks up changes to column types and dropped columns
> CREATE OR REPLACE TABLE emp(name STRING, salary BIGINT);
> SELECT *, typeof(salary)AS salary_type FROM emp_v;
name salary
---- ------