CREATE MATERIALIZED VIEW

적용 대상:검사 '예'로 표시 Databricks SQL

Important

이 기능은 공개 미리 보기 상태입니다.

구체화된 뷰는 미리 계산된 결과를 쿼리에 사용할 수 있고 입력의 변경 내용을 반영하도록 업데이트할 수 있는 뷰입니다. 구체화된 뷰를 새로 고칠 때마다 쿼리 결과가 다시 계산되어 업스트림 데이터 세트의 변경 내용을 반영합니다. 구체화된 모든 뷰는 DLT 파이프라인에서 지원됩니다. 구체화된 뷰를 수동으로 새로 고치거나, 일정에 따라 또는 포함된 DLT 파이프라인을 예약하여 새로 고칠 수 있습니다.

구문

CREATE MATERIALIZED VIEW [IF NOT EXISTS]
  view_name
  [ column_list ]
  [ table_constraints ]
  [ view_clauses ]
  AS query

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

table_constraints
   ( table_constraint [, ...] )

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ] } [...]

매개 변수

  • IF NOT EXISTS

    뷰가 없는 경우 뷰를 만듭니다. 이 이름의 뷰가 CREATE VIEW 이미 있는 경우 문은 무시됩니다.

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

  • view_name

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

  • column_list

    선택적으로 뷰의 쿼리 결과에서 열에 레이블을 지정합니다. 열 목록을 제공하는 경우 열 별칭의 수는 쿼리의 식 수와 일치해야 합니다. 열 목록을 지정하지 않으면 별칭이 뷰 본문에서 파생됩니다.

    • column_alias

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

    • column_comment

      열 별칭을 설명하는 선택적 STRING 리터럴입니다.

    • column_constraint

      Important

      이 기능은 공개 미리 보기 상태입니다.

      구체화된 뷰의 열에 정보 기본 키 또는 정보 외래 키 제약 조건을 추가합니다. 카탈로그의 구체화된 뷰에는 hive_metastore 제약 조건이 지원되지 않습니다.

  • table_constraint

    Important

    이 기능은 공개 미리 보기 상태입니다.

    구체화된 뷰에 정보 기본 키 또는 정보 외래 키 제약 조건을 추가합니다. 카탈로그의 구체화된 뷰에는 hive-metastore 제약 조건이 지원되지 않습니다.

  • view_clauses

    필요에 따라 분할, 주석, 사용자 정의 속성 및 새 구체화된 뷰에 대한 새로 고침 일정을 지정합니다. 각 하위 절은 한 번만 지정할 수 있습니다.

    • PARTITIONED BY

      테이블을 분할할 테이블 열의 선택적 목록입니다.

    • 주석 view_comment

      STRING 테이블을 설명하는 리터럴입니다.

    • TBLPROPERTIES

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

    • 일정 [ 새로 고침 ] CRON cron_string [ 표준 시간대 timezone_id ]

      제공된 경우 스트리밍 테이블 또는 구체화된 뷰를 예약하여 지정된 석영 cron 일정으로 데이터를 새로 고칩니다. time_zone_values허용됩니다. AT TIME ZONE LOCAL은 지원되지 않습니다. 없는 경우 AT TIME ZONE 세션 표준 시간대가 사용됩니다. AT TIME ZONE 세션 표준 시간대가 설정되어 있지 않으면 오류가 throw됩니다. SCHEDULE 의미 체계는 .에 해당합니다 SCHEDULE REFRESH.

      Delta Live Tables 파이프라인 정의에는 구문을 사용할 SCHEDULE 수 없습니다.

  • AS query

    기본 테이블 또는 다른 뷰에서 뷰를 생성하는 쿼리입니다.

필요한 사용 권한

MV(구체화된 뷰)를 만드는 사용자는 MV 소유자이며 다음 권한이 있어야 합니다.

  • SELECT MV에서 참조하는 기본 테이블에 대한 권한입니다.
  • USE CATALOG 부모 카탈로그에 대한 권한 및 USE SCHEMA 부모 스키마에 대한 권한입니다.
  • CREATE MV에 대한 스키마에 대한 권한입니다.

소유자만 MV를 사용할 수 있습니다 REFRESH .

사용자가 MV를 쿼리할 수 있도록 하려면 다음이 필요합니다.

  • USE CATALOG 부모 카탈로그에 대한 권한 및 USE SCHEMA 부모 스키마에 대한 권한입니다.
  • SELECT 구체화된 뷰에 대한 권한입니다.

제한 사항

  • NULL 가능 열에 대한 집계가 있는 sum 구체화된 뷰에 해당 열에서 NULL이 아닌 마지막 값이 제거되어 해당 열의 값만 NULL 다시 기본 경우 구체화된 뷰의 결과 집계 값은 대신 0NULL을 반환합니다.
  • 열 참조에는 별칭이 필요하지 않습니다. 다음 예제와 같이 열이 아닌 참조 식에는 별칭이 필요합니다.
    • 허용: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • 허용되지 않음: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • 구체화된 뷰는 ID 열 또는 서로게이트 키를 지원하지 않습니다.
  • 구체화된 뷰는 임시 OPTIMIZEVACUUM 명령을 지원하지 않습니다. 유지 관리는 자동으로 수행됩니다.

예제

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS 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 and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Create a materialized view with a column constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL PRIMARY KEY,
    full_name,
    movie_title
  )
  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 materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL,
    full_name,
    movie_title,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  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 materialized view without column list
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  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;