다음을 통해 공유


CREATE VIEW

적용 대상:예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime

SQL 쿼리의 결과set 따라 물리적 데이터가 없는 가상 table 생성합니다. ALTER VIEWDROP 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 ] } [, ...] )

Parameters

  • OR REPLACE

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

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

  • TEMPORARY

    임시 views는 생성한 세션에만 표시되며, 세션이 종료될 때 삭제됩니다.

  • GLOBAL TEMPORARY

    적용 대상:예로 표시된 확인 Databricks 런타임

    전역 임시 views는 시스템에 의해 보존된 임시 schemaglobal_temp와 연결되어 있습니다.

  • IF NOT EXISTS

    존재하지 않는 경우에만 뷰를 작성합니다. 이 이름의 뷰가 이미 있는 경우 CREATE VIEW 문은 무시됩니다.

    IF NOT EXISTS 또는 OR REPLACE 중 최대 하나를 지정할 수 있습니다.

  • view_name

    새로 만들어진 뷰의 이름입니다. 임시 뷰의 이름은 정규화되면 안 됩니다. 정규화된 뷰 이름은 고유해야 합니다.

    hive_metastore에서 생성된 Views은 영숫자 ASCII 문자와 밑줄(_)만 포함할 수 있습니다 (INVALID_SCHEMA_OR_RELATION_NAME).

  • schema_binding

    적용 대상:예로 표시된 확인 Databricks Runtime 15.3 이상

    필요에 따라 기본 개체 정의의 변경으로 인해 뷰가 쿼리의 schema 변경 내용에 맞게 조정되는 방식을 지정합니다.

    이 절은 임시 views 또는 구체화된 views에 대해 지원되지 않습니다.

    • WITH SCHEMA 바인딩

      쿼리 column-list이 다음 조건을 제외하고 변경되는 경우 보기가 무효화됩니다.

      • column-list에 별조항이 포함되어 있으며, 추가 columns가 있습니다. 이러한 추가 columns이 무시됩니다.
      • 하나 이상의 columns 형식이 암시적 캐스팅 규칙을 사용하여 원래 column 형식으로 안전하게 캐스팅될 수 있는 방식으로 변경되었습니다.

      이 옵션은 기본 동작입니다.

    • 은 SCHEMA 보상과 함께

      다음 조건을 제외하고 쿼리 columnlist 변경되면 보기가 유효하지 않습니다.

      • column-list에 별 절이 포함되어 있으며, 추가로 columns도 있습니다. 이러한 추가 columns는 무시됩니다.
      • 하나 이상의 columns 타입이 명시적 ANSI 캐스트 규칙을 사용하여 원래 column 타입으로 캐스트될 수 있도록 변경되었습니다.
    • 과 함께 SCHEMA 타입 EVOLUTION

      이 뷰는 SQL 컴파일러가 뷰에 대한 참조에 대한 응답으로 이러한 변경 내용을 감지할 때 쿼리 columnlist 형식에 대한 변경 내용을 자체 정의로 채택합니다.

    • 와 함께 SCHEMA 진화

      • 이 모드는 WITH SCHEMA TYPE EVOLUTION처럼 동작하며, 보기에 명시적인 column_list이 포함되지 않은 경우 column 이름 변경 사항이나 추가 및 삭제된 columns를 채택합니다.
      • 쿼리를 더 이상 구문 분석할 수 없거나 선택적 뷰 column_listqueryselect-list의 식 수와 일치하지 않게 되는 경우에만 보기가 유효하지 않게 됩니다.
  • column_list

    필요에 따라 뷰의 쿼리 결과에 columns 레이블을 지정합니다. 만약 columnlist을 제공하는 경우, column 별칭 수는 쿼리의 식 수와 일치해야 합니다. 지정된 columnlist 없는 경우 뷰 본문에서 별칭이 파생됩니다.

    • column_alias

      column 별칭은 고유해야 합니다.

    • column_comment

      선택적 STRING 리터럴은 column 별칭을 설명합니다.

  • view_comment

    뷰 수준 주석을 제공하는 선택적 STRING 리터럴입니다.

  • TBLPROPERTIES

    선택적으로 하나 이상의 사용자 정의 속성을 설정합니다.

  • AS query

    기본 tables 또는 다른 views뷰를 생성하는 쿼리입니다.

예제

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