Поделиться через


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.

  • view_name

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

    Представления, созданные в 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_alias

      Псевдонимы столбцов должны быть уникальными.

    • column_comment

      Необязательный STRING литерал, описывающий псевдоним столбца.

  • view_comment

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

  • TBLPROPERTIES

    При необходимости задает одно или несколько свойств, определяемых пользователем.

  • 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
 ---- ------