다음을 통해 공유


CREATE VIEW

적용 대상:체크 표시 예 Databricks SQL 체크 표시 예 Databricks Runtime

yaml 사양에 따라 SQL 쿼리 또는 메트릭 뷰의 결과 집합을 기반으로 실제 데이터가 없는 가상 테이블을 생성합니다. ALTER VIEWDROP VIEW는 메타데이터만 변경합니다.

이 문을 실행하려면 메타스토어 관리자 USE CATALOG 이거나 카탈로그 및 스키마에 대한 권한과 USE 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 ] } [, ...] )

매개 변수

  • 또는 교체

    같은 이름의 뷰가 이미 있는 경우, 그것이 대체됩니다. 기존의 뷰를 바꾸려면 소유자여야 합니다.

    기존 보기를 바꿔도 원래 보기 또는 table_id에 부여된 권한은 유지되지 않습니다. ALTER VIEW 사용하여 권한을 유지합니다.

    CREATE OR REPLACE VIEW view_nameDROP VIEW IF EXISTS view_name 뒤에 CREATE VIEW view_name가 오는 것과 동일합니다.

  • 임시

    TEMPORARY 뷰는 뷰를 만든 세션에만 표시되며 세션이 종료되면 삭제됩니다.

  • 글로벌 임시

    적용 대상:'예'로 표시된 항목 Databricks 런타임

    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 Catalog 전용

    뷰를 메트릭 뷰로 식별합니다. 뷰를 정의 LANGUAGE YAML 해야 하며 뷰 본문은 유효한 yaml 사양이어야 합니다.

    이 문구는 임시 뷰에서는 지원되지 않습니다.

    메트릭 뷰는 DEFAULT COLLATIONschema_binding 절을 지원하지 않습니다.

    메트릭 뷰의 YAML 사양은 dimensionsmeasures을 정의합니다. 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내에서 사용할 기본 데이터 정렬을 정의합니다. 지정하지 않으면 기본 데이터 정렬은 뷰가 만들어지는 스키마에서 파생됩니다.

    메트릭 뷰에는 이 절이 지원되지 않습니다.

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