CREATE VIEW
Область применения: 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 для сохранения привилегий.
CREATE OR REPLACE VIEW view_name
эквивалентенDROP VIEW IF EXISTS view_name
, за которым следуетCREATE VIEW view_name
.TEMPORARY
Временные представления отображаются только для созданного сеанса и удаляются при завершении сеанса.
ГЛОБАЛЬНЫЙ ВРЕМЕННЫЙ
Область применения:
Databricks Runtime
Глобальные временные представления привязаны к временной схеме, сохраняемой системой
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 и выше
При необходимости указывает, как представление адаптируется к изменениям схемы запроса из-за изменений в определениях базовых объектов.
Это условие не поддерживается для временных или материальных представлений.
С SCHEMA СВЯЗЬЮ
Представление станет недействительным, если список столбцов запроса изменяется, кроме следующих случаев:
- Список столбцов содержит предложение "Звезда" и есть дополнительные столбцы. Эти дополнительные столбцы игнорируются.
- Тип одного или нескольких столбцов изменился таким образом, что позволяет безопасно приведения их к исходным типам столбцов с помощью неявных правил приведения.
Это поведение принимается по умолчанию.
WITH SCHEMA КОМПЕНСАЦИИ
Представление станет недействительным, если список столбцов запросов изменяется, за исключением следующих условий:
- Список столбцов содержит предложение "Звезда" и есть дополнительные столбцы. Эти дополнительные столбцы игнорируются.
- Тип одного или нескольких столбцов изменился таким образом, чтобы они были приведены к их исходным типам столбцов с помощью явных правил приведения ANSI.
С SCHEMA ТИП ЭВОЛЮЦИИ
Представление будет принимать любые изменения типов в списке столбцов запросов в собственное определение, когда компилятор SQL обнаруживает такое изменение в ответ на ссылку на представление.
С SCHEMA EVOLUTION
- Этот режим работает так, как
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
---- ------