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


CREATE VIEW

Применяется к:отмечен флажком 'да' Databricks SQL отмечен флажком 'да' Databricks Runtime

Создает виртуальную таблицу, которая не содержит физических данных на основе результируемого набора SQL-запроса или представления метрик на основе спецификации yaml. ALTER VIEW и DROP VIEW изменяют только метаданные.

Для выполнения этой инструкции необходимо быть администратором хранилища метаданных или иметь USE CATALOGUSE SCHEMA привилегии в каталоге и схеме, а также CREATE TABLE привилегии в целевой схеме.

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

Синтаксис

CREATE [ OR REPLACE ] [ TEMPORARY ] VIEW [ IF NOT EXISTS ] view_name
    [ column_list ]
    [ with_clause |
      COMMENT view_comment |
      DEFAULT COLLATION collation_name |
      TBLPROPERTIES clause |
      LANGUAGE YAML ] [...]
    AS { query | $$ yaml_string $$ }

with_clause
   WITH { { schema_binding | METRICS } |
          ( { schema_binding | METRICS } [, ...] } )

schema_binding
   WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION }

column_list
   ( { column_alias [ COMMENT column_comment ] } [, ...] )

Параметры

  • ИЛИ ЗАМЕНИТЬ

    Если представление с таким именем уже существует, оно заменяется. Чтобы заменить существующее представление, необходимо быть его владельцем.

    Замена существующего представления не сохраняет привилегии, предоставленные в исходном представлении. Используйте ALTER VIEW для сохранения привилегий.

    CREATE OR REPLACE VIEW view_name эквивалентен DROP VIEW IF EXISTS view_name, за которым следует CREATE VIEW view_name.

  • ВРЕМЕННЫЙ

    TEMPORARY представления видны только сеансу, который их создал, и удаляются после завершения сеанса.

  • ГЛОБАЛЬНЫЙ ВРЕМЕННЫЙ

    Область применения:отметить галочкой Databricks Runtime

    GLOBAL TEMPORARY представления привязаны к системно-сохраненной временной схеме global_temp.

  • ЕСЛИ НЕ СУЩЕСТВУЕТ

    Создает представление, только если оно не существует. Если представление с таким именем уже существует, инструкция CREATE VIEW игнорируется.

    Можно указать не более одного из IF NOT EXISTS или OR REPLACE.

  • view_name

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

    Имена представлений, созданные в hive_metastore, могут содержать только буквенно-цифровые символы ASCII и символы подчеркивания (INVALID_SCHEMA_OR_RELATION_NAME).

  • МЕТРИКА

    Применяется к:отмечено да Databricks SQL отмечено да Databricks Runtime 16.4 и выше только каталог Unity отмечен.

    Определяет представление как представление метрик. Представление должно быть определено с помощью LANGUAGE YAML, а текст представления должен быть допустимой спецификацией yaml.

    Этот пункт не поддерживается для временных представлений.

    Метрический вид не поддерживает DEFAULT COLLATION и schema_binding.

    Спецификация YAML представления метрик определяет dimensions и measures. Это dimensions — столбцы представления, с помощью которых вызывающий объект может агрегировать меры, тогда как measures определяет агрегаты представления.

    Вызывающий представление метрик использует выражение меры для доступа к определенным представлениям, а не для указания функций агрегирования.

  • schema_binding

    Область применения:флажок отмеченный как 'да' Databricks Runtime 15.3 и выше

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

    Этот пункт не поддерживается для временных представлений, метрик или материализованных представлений.

    • SCHEMA СВЯЗЫВАНИЕ

      Представление станет недействительным, если список столбцов запроса изменяется, кроме следующих случаев:

      • Список столбцов содержит предложение "Звезда" и есть дополнительные столбцы. Эти дополнительные столбцы игнорируются.
      • Тип одного или нескольких столбцов изменился таким образом, что позволяет безопасно приведения их к исходным типам столбцов с помощью неявных правил приведения.

      Это поведение принимается по умолчанию.

    • SCHEMA КОМПЕНСАЦИЯ

      Представление станет недействительным, если список столбцов запросов изменяется, за исключением следующих условий:

      • Список столбцов содержит предложение "Звезда" и есть дополнительные столбцы. Эти дополнительные столбцы игнорируются.
      • Тип одного или нескольких столбцов изменился таким образом, чтобы они были приведены к их исходным типам столбцов с помощью явных правил приведения ANSI.
    • SCHEMA ЭВОЛЮЦИЯ ТИПОВ

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

    • SCHEMA ЭВОЛЮЦИЯ

      • Этот режим работает так, как SCHEMA TYPE EVOLUTION, а также принимает изменения в именах столбцов или добавляет и удаляет столбцы, если представление не включает явный column_list.
      • Представление станет недействительным только в том случае, если запрос больше не может быть распознан, или необязательный вид column_list больше не соответствует количеству выражений в списке выборки query.
  • column_list

    При необходимости можно задать метки для столбцов в результатах запроса представления. Если указан список столбцов, количество псевдонимов столбцов должно совпадать с количеством выражений в запросе, а для представлений метрик — со спецификацией YAML. В случае, если список столбцов не указан, псевдонимы выводятся из тела представления.

    • column_alias

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

    • column_comment

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

  • view_comment

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

  • КОЛЛАЦИЯ ПО УМОЛЧАНИЮ collation_name

    Применяется к:отмечено да Databricks SQL отмечено да Databricks Runtime 16.3 и более поздних версий

    Определяет параметры сортировки по умолчанию, используемые в query. Если не указано, параметры сортировки по умолчанию — UTF8_BINARYa.

    Эта клауза не поддерживается для видов метрик.

  • TBLPROPERTIES

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

  • AS ЗАПРОС

    Запрос, который создает представление из базовых таблиц или других представлений.

    Этот пункт не поддерживается для метрических представлений.

  • AS $$ yaml_string $$

    Спецификация yaml, определяющая представление метрик.

Примеры

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

-- Create a view using a default collation of UTF8_BINARY
> CREATE VIEW v DEFAULT COLLATION UTF8_BINARY
    AS SELECT 5::STRING AS text;

-- Creates a Metric View as specified in the YAML definition, with three dimensions and four measures representing the count of orders.
> CREATE OR REPLACE VIEW region_sales_metrics
  (month COMMENT 'Month order was made',
   status,
   order_priority,
   count_orders COMMENT 'Count of orders',
   total_Revenue,
   total_Revenue_p_Customer,
   total_revenue_for_open_orders)
  WITH METRICS
  LANGUAGE YAML
  COMMENT 'A Metric View for regional sales metrics.'
  AS $$
   version: 0.1
   source: samples.tpch.orders
   filter: o_orderdate > '1990-01-01'
   dimensions:
   - name: month
     expr: date_trunc('MONTH', o_orderdate)
   - name: status
     expr: case
       when o_orderstatus = 'O' then 'Open'
       when o_orderstatus = 'P' then 'Processing'
       when o_orderstatus = 'F' then 'Fulfilled'
       end
   - name: prder_priority
     expr: split(o_orderpriority, '-')[1]
   measures:
   - name: count_orders
     expr: count(1)
   - name: total_revenue
     expr: SUM(o_totalprice)
   - name: total_revenue_per_customer
     expr: SUM(o_totalprice) / count(distinct o_custkey)
   - name: total_revenue_for_open_orders
     expr: SUM(o_totalprice) filter (where o_orderstatus='O')
  $$;

> DESCRIBE EXTENDED region_sales_metrics;
  col_name                       data_type
  ------------------------------ --------------------------
  month                          timestamp
  status                         string
  order_priority                 string
  count_orders                   bigint measure
  total_revenue                  decimal(28,2) measure
  total_revenue_p_customer       decimal(38,12) measure
  total_revenue_for_open_orders  decimal(28,2) measure

  # Detailed Table Information
  Catalog                        main
  Database                       default
  Table                          region_sales_metrics
  Owner                          [email protected]
  Created Time                   Thu May 15 13:03:01 UTC 2025
  Last Access                    UNKNOWN
  Created By                     Spark
  Type                           METRIC_VIEW
  Comment                        A Metric View for regional sales metrics.
  Use Remote Filtering           false
  View Text                      "
     version: 0.1
     source: samples.tpch.orders
     filter: o_orderdate > '1990-01-01'
     dimensions:
     - name: month
       expr: date_trunc('MONTH', o_orderdate)
     - name: status
       expr: case
         when o_orderstatus = 'O' then 'Open'
         when o_orderstatus = 'P' then 'Processing'
         when o_orderstatus = 'F' then 'Fulfilled'
         end
     - name: Order_Priority
       expr: split(o_orderpriority, '-')[1]
     measures:
     - name: count_orders
       expr: count(1)
     - name: total_Revenue
       expr: SUM(o_totalprice)
     - name: total_Revenue_per_Customer
       expr: SUM(o_totalprice) / count(distinct o_custkey)
     - name: Total_Revenue_for_Open_Orders
       expr: SUM(o_totalprice) filter (where o_orderstatus='O')
                                 "
  Language                       YAML
  Table Properties               [metric_view.from.name=samples.tpch.orders, metric_view.from.type=ASSET, metric_view.where=o_orderdate > '1990-01-01']

-- Tracking total_revenue_per_customer by month in 1995
> SELECT extract(month from month) as month,
    measure(total_revenue_per_customer)::bigint AS total_revenue_per_customer
  FROM region_sales_metrics
  WHERE extract(year FROM month) = 1995
  GROUP BY ALL
  ORDER BY ALL;
  month	 total_revenue_per_customer
  -----  --------------------------
   1     167727
   2     166237
   3     167349
   4     167604
   5     166483
   6     167402
   7     167272
   8     167435
   9     166633
  10     167441
  11     167286
  12     167542

-- Tracking total_revenue_per_customer by month and status in 1995
> SELECT extract(month from month) as month,
    status,
    measure(total_revenue_per_customer)::bigint AS total_revenue_per_customer
  FROM region_sales_metrics
  WHERE extract(year FROM month) = 1995
  GROUP BY ALL
  ORDER BY ALL;
  month  status      total_revenue_per_customer
  -----  ---------   --------------------------
   1     Fulfilled   167727
   2     Fulfilled   161720
   2    Open          40203
   2    Processing   193412
   3    Fulfilled    121816
   3    Open          52424
   3    Processing   196304
   4    Fulfilled     80405
   4    Open          75630
   4    Processing   196136
   5    Fulfilled     53460
   5    Open         115344
   5    Processing   196147
   6    Fulfilled     42479
   6    Open         160390
   6    Processing   193461
   7    Open         167272
   8    Open         167435
   9    Open         166633
   10   Open         167441
   11   Open         167286
   12   Open         167542