Megosztás a következőn keresztül:


CREATE VIEW

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

Olyan virtuális táblát hoz létre, amely nem rendelkezik fizikai adatokkal egy SQL-lekérdezés eredményhalmaza vagy egy yaml-specifikáción alapuló metrikanézet alapján. ALTER VIEW és DROP VIEW csak a metaadatok módosítása.

Az utasítás végrehajtásához metaadattár-rendszergazdának kell lennie, vagy rendelkeznie kell USE CATALOG és USE SCHEMA jogosultságokkal a katalógusban és a sémában, valamint CREATE TABLE jogosultságokkal a célsémában.

A parancsot végrehajtó felhasználó lesz a nézet tulajdonosa.

Szemantika

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 ] } [, ...] )

Paraméterek

  • VAGY CSERE

    Ha már létezik ilyen nevű nézet, a program lecseréli. Meglévő nézet cseréjéhez Önnek kell a tulajdonosnak lennie.

    A meglévő nézet lecserélése nem őrzi meg az eredeti nézeten vagy a table_id biztosított jogosultságokat. A jogosultságok megőrzéséhez használja a ALTER VIEW.

    CREATE OR REPLACE VIEW view_name egyenértékű a DROP VIEW IF EXISTS view_name, amit CREATE VIEW view_namekövet.

  • IDEIGLENES

    TEMPORARY a nézetek csak az őket létrehozó munkamenet számára láthatók, és a munkamenet végén el lesznek vetve.

  • GLOBÁLIS IDEIGLENES

    A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

    GLOBAL TEMPORARY a nézetek egy rendszer által megőrzött ideiglenes sémához global_tempvannak kötve.

  • HA NEM LÉTEZIK

    Csak akkor hozza létre a nézetet, ha az még nem létezik. Ha már létezik ilyen nevű nézet, az CREATE VIEW utasítás figyelmen kívül lesz hagyva.

    Legfeljebb egyet adhat meg a következők közül: IF NOT EXISTS vagy OR REPLACE.

  • view_name

    Az újonnan létrehozott nézet neve. Az ideiglenes nézet neve nem minősíthető. A teljes nézetnévnek egyedinek kell lennie.

    A létrehozott hive_metastore nézetnevek csak alfanumerikus ASCII-karaktereket és aláhúzásjeleket (INVALID_SCHEMA_OR_RELATION_NAME) tartalmazhatnak.

  • METRIKÁK

    A következőkre vonatkozik:bejelölt igen Databricks SQL bejelölt igen Databricks Runtime 16.4 és újabb verziók bejelölt igen kizárólag a Unity Catalog

    A nézetet metrikanézetként azonosítja. A nézetet meg kell határozni, LANGUAGE YAML és a nézet törzsének érvényes yaml-specifikációnak kell lennie.

    A Databricks Runtime 17.2-es használata előtt ez a záradék ideiglenes nézetek esetén nem támogatott.

    A metrikanézet nem támogatja a DEFAULT COLLATION és schema_binding záradékokat.

    A metrikanézet YAML-specifikációja meghatározza dimensions és measures. A dimensions nézet azon oszlopai, amelyekkel a meghívó összesítheti a mértékeket, míg a measures nézet összesítéseit határozza meg.

    A metrikanézet meghívója a mértékkifejezést használja a nézetek által definiált mértékek eléréséhez az összesítési függvények megadása helyett.

  • schema_binding

    A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 15.3 vagy újabb

    Opcionálisan meghatározza, hogy a nézet hogyan alkalmazkodik a lekérdezés sémájának a mögöttes objektumdefiníciók változásai miatti változásaihoz.

    Ez a záradék ideiglenes nézetek, metrikák vagy materializált nézetek esetében nem támogatott.

    • SCHEMA KÖTÉS

      A nézet érvénytelenné válik, ha a lekérdezés oszloplistája megváltozik, kivéve az alábbi feltételeket:

      • Az oszloplistában van egy csillag (*) karakter, és további oszlopok is vannak. Ezek a további oszlopok figyelmen kívül lesznek hagyva.
      • Egy vagy több oszlop típusa úgy módosult, hogy az implicit öntési szabályok használatával biztonságosan át lehessen őket helyezni az eredeti oszloptípusokra.
    • SCHEMA KÁRTÉRÍTÉS

      A nézet érvénytelenné válik, ha a lekérdezés oszloplistája megváltozik, kivéve az alábbi feltételeket:

      • Az oszloplistában van egy csillag (*) karakter, és további oszlopok is vannak. Ezek a további oszlopok figyelmen kívül lesznek hagyva.
      • Egy vagy több oszlop típusa úgy módosult, hogy explicit ANSI típuskonverziós szabályokkal az eredeti oszloptípusokra alakíthatók legyenek.

      Ez az alapértelmezett viselkedés.

    • SCHEMA TÍPUSFEJLŐDÉS

      A nézet a lekérdezésoszlopok listájában lévő típusokat a saját definíciójába fogja beépíteni, amikor az SQL-fordító észleli az ilyen változást a nézetre való hivatkozásra adott válaszként.

    • SCHEMA EVOLÚCIÓ

      • Ez a mód úgy viselkedik, mint a SCHEMA TYPE EVOLUTION, és ha a nézet nem tartalmaz explicit column_list, akkor az oszlopnevekben vagy a hozzáadott és elvetett oszlopokban is módosításokat hajt végre.
      • A nézet csak akkor lesz érvénytelen, ha a lekérdezés már nem elemezhető, vagy az opcionális nézet column_list már nem egyezik meg a query választólistában szereplő kifejezések számával.
  • column_list

    Igény szerint címkézheti a nézet lekérdezési eredményében szereplő oszlopokat. Ha oszloplistát ad meg, az oszlop aliasainak számát meg kell egyeznie a lekérdezésben szereplő kifejezések számával, vagy a metrikanézetek esetében a YAML-specifikációval. Ha nincs megadva oszloplista, akkor a rendszer a nézet törzséből származtat aliasokat.

    • column_alias

      Az oszlop aliasainak egyedinek kell lenniük.

    • column_comment

      Egy nem kötelező STRING literál, amely leírja az oszlop aliasát.

  • view_comment

    Egy nem kötelező STRING literál, amely nézetszintű megjegyzéseket biztosít.

  • ALAPÉRTELMEZETT RENDEZÉSI COLLATION_NAME

    A következőkre vonatkozik:igen Databricks SQL igen Databricks Runtime 16.3 és újabb

    Meghatározza a queryelemen belüli alapértelmezett sorrend összeállítását. Ha nincs megadva, az alapértelmezett rendezés abból a sémából származik, amelyben a nézet létrejön.

    Ez a záradék nem támogatott a metrikanézetek esetében.

  • TBLPROPERTIES

    Igény szerint beállíthat egy vagy több felhasználó által definiált tulajdonságot.

  • AS-lekérdezés

    Olyan lekérdezés, amely alaptáblákból vagy más nézetekből hozza létre a nézetet.

    Ez a záradék nem támogatott a metrikanézetek esetében.

  • AS $$ yaml_string $$

    Egy YAML specifikáció, amely meghatároz egy metrikanézetet.

Példák

-- 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_per_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_per_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                          alf@melmak.et
  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