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


СОЗДАТЬ ПРЕДСТАВЛЕНИЕ

Область применения:флажок 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.

  • view_name

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

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