다음을 통해 공유


CREATE VIEW

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

SQL 쿼리의 결과 집합을 기반으로 실제 데이터가 없는 가상 테이블을 구성합니다. 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 ] } [, ...] )

매개 변수

  • OR REPLACE

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

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

  • TEMPORARY

    TEMPORARY 뷰는 뷰를 만든 세션에서만 볼 수 있으며 세션이 종료되면 삭제됩니다.

  • GLOBAL TEMPORARY

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

    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열이 포함되지 않은 경우 열 이름 또는 추가된 열 및 삭제된 열의 변경 내용도 채택합니다.
      • 쿼리를 더 이상 구문 분석할 수 없거나 선택적 뷰가 select-list의 식 수와 더 이상 일치하지 않는 경우에만 보기 column_listquery 유효하지 않습니다.
  • 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
 ---- ------