CREATE MATERIALIZED VIEW¶
기존 테이블의 쿼리를 기반으로 현재/지정된 스키마에 구체화된 뷰를 새로 만들고 뷰를 데이터로 채웁니다.
자세한 내용은 구체화된 뷰 작업하기 섹션을 참조하십시오.
- 참고 항목:
ALTER MATERIALIZED VIEW , DROP MATERIALIZED VIEW , SHOW MATERIALIZED VIEWS , DESCRIBE MATERIALIZED VIEW
구문¶
CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
[ COPY GRANTS ]
( <column_list> )
[ <col1> [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1> , <cond_col1> , ... ) ]
[ WITH ] PROJECTION POLICY <policy_name>
[ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ , <col2> [ ... ] ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
AS <select_statement>
필수 매개 변수¶
name
뷰에 대한 식별자를 지정하는데, 뷰가 생성된 스키마에 대해 고유한 식별자여야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object"
)로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
select_statement
뷰를 만드는 데 사용되는 쿼리를 지정합니다. 이 쿼리는 뷰에 대한 텍스트/정의의 역할을 합니다. 이 쿼리는 SHOW VIEWS 및 SHOW MATERIALIZED VIEWS 의 출력에 표시됩니다.
select_statement
에 대한 제한 사항이 있습니다. 자세한 내용은 다음을 참조하십시오.
선택적 매개 변수¶
column_list
:뷰의 열 이름이 기본 테이블의 열 이름과 똑같지 않게 하려면 열 이름을 지정하는 열 목록을 포함할 수 있습니다. (열의 데이터 타입을 지정할 필요가 없습니다.)
구체화된 뷰에 대한 CLUSTER BY 절을 포함하는 경우에는 열 이름 목록을 포함해야 합니다.
MASKING POLICY = policy_name
열에 설정할 마스킹 정책 을 지정합니다.
USING ( col_name , cond_col_1 ... )
조건부 마스킹 정책 SQL 식에 전달할 인자를 지정합니다.
목록의 첫 번째 열은 데이터를 마스킹하거나 토큰화할 정책 조건에 대한 열을 지정하며, 마스킹 정책이 설정된 열과 반드시 일치해야 합니다.
추가 열은 첫 번째 열에 대해 쿼리가 수행될 때 쿼리 결과의 각 행에 있는 데이터를 마스킹할지 또는 토큰화할지 결정하기 위해 평가할 열을 지정합니다.
USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.
PROJECTION POLICY policy_name
열에 설정할 마스킹 정책 을 지정합니다.
string_literal
뷰에 대한 설명을 지정합니다. 문자열 리터럴은 작은따옴표로 묶어야 합니다. (문자열 리터럴은 이스케이프되지 않는 한 작은따옴표를 포함하면 안 됩니다.)
기본값: 값 없음.
expr#
구체화된 뷰를 클러스터링할 식을 지정합니다. 일반적으로, 각각의 식은 구체화된 뷰에 있는 열의 이름입니다.
구체화된 뷰 클러스터링에 대한 자세한 내용은 구체화된 뷰 및 클러스터링 을 참조하십시오. 일반적으로 클러스터링에 대한 자세한 내용은 데이터 클러스터링이란 무엇입니까? 섹션을 참조하십시오.
SECURE
뷰가 안전한 것으로 지정합니다. 보안 뷰에 대한 자세한 내용은 보안 뷰 관련 작업하기 을 참조하십시오.
기본값: 값 없음(뷰가 안전하지 않음)
COPY GRANTS
OR REPLACE
절을 사용하여 기존 뷰를 바꾸는 경우 대체 뷰는 원래 뷰의 액세스 허가를 유지합니다. 이 매개 변수는 OWNERSHIP을 제외한 모든 권한을 기존 뷰에서 새 뷰로 복사합니다. 새 뷰는 스키마의 오브젝트 유형에 대해 정의된 향후 모든 권한 부여를 상속하지는 않습니다. 기본적으로, CREATE MATERIALIZED VIEW 문을 실행하는 역할은 새 뷰를 소유합니다.CREATE VIEW 문에 이 매개 변수가 포함되지 않은 경우에는 새 뷰가 원본 뷰에 부여된 모든 명시적인 액세스 권한을 상속하지 않지만, 스키마의 오브젝트 유형에 대해 정의된 향후 모든 권한 부여를 상속하지는 않습니다.
권한 부여 복사 작업은 CREATE VIEW 문에서 원자적으로(즉, 같은 트랜잭션 내에서) 발생합니다.
기본값: 값 없음(권한 부여는 복사되지 않음).
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
구체화된 뷰에 설정할 행 액세스 정책 을 지정합니다.
AGGREGATION POLICY policy_name
구체화된 뷰에 설정할 집계 정책 을 지정합니다.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
사용법 노트¶
구체화된 뷰를 만들려면 스키마에 대한 CREATE MATERIALIZED VIEW 권한과 기본 테이블에 대한 SELECT 권한이 필요합니다. 권한과 구체화된 뷰에 대한 자세한 내용은 구체화된 뷰의 스키마에 대한 권한 을 참조하십시오.
구체화된 뷰의 이름을 선택할 때, 스키마는 같은 이름의 테이블과 뷰를 포함할 수 없습니다. CREATE [ MATERIALIZED ] VIEW는 이름이 같은 테이블이 스키마에 이미 있으면 오류를 발생시킵니다.
select_statement
를 지정할 때 다음 사항을 참고하십시오.HAVING 절이나 ORDER BY 절을 지정할 수 없습니다.
구체화된 뷰에 대한 CLUSTER BY 절을 포함하는 경우
column_list
절을 포함해야 합니다.select_statement
에서 기본 테이블을 두 번 이상 참조하는 경우 기본 테이블의 모든 참조에 대해 똑같은 한정자 를 사용하십시오.예를 들어, 같은
select_statement
에서base_table
,schema.base_table
,database.schema.base_table
을 혼합해 사용하지 마십시오. 대신, 이러한 양식 중 하나(예:database.schema.base_table
)를 선택하고select_statement
전체에서 이를 일관되게 사용합니다.SELECT 문에서 스트림 오브젝트를 쿼리하지 마십시오. 스트림은 뷰 또는 구체화된 뷰의 소스 오브젝트로 사용하도록 설계되지 않았습니다.
일부 열 이름은 구체화된 뷰에서 허용되지 않습니다. 열 이름이 허용되지 않는 경우 열에 대한 별칭을 정의할 수 있습니다. 자세한 내용은 구체화된 뷰에서 허용되지 않는 열 이름 처리하기 섹션을 참조하십시오.
구체화된 뷰가 외부 테이블을 쿼리하는 경우 새 파일, 업데이트된 파일, 삭제된 파일을 포함하여, 참조된 클라우드 저장소 위치의 변화를 반영하도록 외부 테이블에 대한 파일 수준 메타데이터를 새로 고쳐야 합니다.
클라우드 저장소 서비스에 대한 이벤트 알림 서비스를 사용하여 자동으로 또는 ALTER EXTERNAL TABLE … REFRESH 문을 사용하여 수동으로 외부 테이블의 메타데이터를 새로 고칠 수 있습니다.
구체화된 뷰는 여러 가지 다른 제한 사항이 있습니다. 자세한 내용은 구체화된 뷰 만들기에 대한 제한 사항 및 구체화된 뷰 작업에 대한 제한 사항 섹션을 참조하십시오.
기본 원본 테이블의 스키마가 변경되어 뷰 정의가 유효하지 않게 되는 경우 뷰 정의가 업데이트되지 않습니다. 예:
기본 테이블에서 뷰가 생성되고 이후에 그 기본 테이블에서 열이 삭제됩니다.
구체화된 뷰의 기본 테이블이 삭제됩니다.
이러한 시나리오에서 뷰를 쿼리하면 뷰가 무효화된 이유가 포함된 오류가 반환됩니다. 예:
Failure during expansion of view 'MV1': SQL compilation error: Materialized View MV1 is invalid. Invalidation reason: DDL Statement was executed on the base table 'MY_INVENTORY'. Marked Materialized View as invalid.
이런 문제가 발생하면 다음을 수행할 수 있습니다.
기본 테이블이 삭제되었는데 Time Travel의 데이터 보존 기간 이 지나지 않은 경우에는 기본 테이블 삭제를 취소 하여 구체화된 뷰를 다시 유효하게 만들 수 있습니다.
CREATE OR REPLACE MATERIALIZED VIEW 명령을 사용하여 뷰를 다시 생성합니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
OR REPLACE
를 사용하는 것은 기존 구체화된 뷰에서 DROP MATERIALIZED VIEW 을 사용한 다음 같은 이름을 가진 새 뷰를 만드는 것과 같습니다.CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.
이는 CREATE OR REPLACE MATERIALIZED VIEW 작업과 동시에 수행되는 모든 쿼리가 이전 또는 새 구체화된 뷰 버전을 사용함을 의미합니다.
하나 이상의 구체화된 뷰 열에 마스킹 정책을 사용하여 구체화된 뷰를 생성하거나, 구체화된 뷰에 추가된 행 액세스 정책을 생성할 때, POLICY_CONTEXT 함수를 사용하여, 마스킹 정책에 의해 보호되는 열 및 행 액세스 정책에 의해 보호되는 구체화된 뷰에 대한 쿼리를 시뮬레이션합니다.
예¶
테이블에서 모든 행을 선택하는 설명과 함께 현재 스키마에서 구체화된 뷰 만들기:
CREATE MATERIALIZED VIEW mymv COMMENT='Test view' AS SELECT col1, col2 FROM mytable;
더 많은 예는 구체화된 뷰 작업하기 의 예를 참조하십시오.