CREATE MATERIALIZED VIEW
하나 이상의 Amazon Redshift 테이블을 기반으로 구체화된 뷰를 생성합니다. Spectrum 또는 통합 쿼리를 사용하여 생성된 외부 테이블을 기반으로 구체화된 뷰를 만들 수도 있습니다. Spectrum에 대한 자세한 내용은 Amazon Redshift Spectrum 섹션을 참조하세요. 연합 쿼리에 대한 자세한 내용은 Amazon Redshift에서 연합 쿼리를 사용하여 데이터 쿼리 섹션을 참조하세요.
구문
CREATE MATERIALIZED VIEW mv_name [ BACKUP { YES | NO } ] [ table_attributes ] [ AUTO REFRESH { YES | NO } ] AS query
파라미터
- BACKUP
-
자동 및 수동 클러스터 스냅샷에 구체화된 뷰를 포함해야 할지 여부를 지정하는 절입니다.
중요한 데이터를 포함하지 않는 구체화된 뷰의 경우 BACKUP NO를 지정하여 스냅샷을 생성하고 스냅샷으로부터 복원할 때의 처리 시간을 절약하고 Amazon Simple Storage Service의 스토리지 공간을 줄입니다. BACKUP NO 설정은 클러스터 내에 있는 다른 노드로의 데이터 자동 복제에 아무런 영향도 미치지 않으므로, 노드 장애가 발생할 경우 BACKUP NO가 지정된 구체화된 뷰가 복원됩니다. 기본값은 BACKUP YES입니다.
- table_attributes
-
다음을 포함하여 구체화된 보기의 데이터가 분산되는 방식을 지정하는 절입니다.
- AS query
-
구체화된 뷰와 해당 콘텐츠를 정의하는 유효한
SELECT
문입니다. 쿼리의 결과 집합은 구체화된 보기의 열과 행을 정의합니다. 구체화된 뷰 생성 시 제한 사항에 대한 자세한 내용은 제한 사항 섹션을 참조하세요.또한 쿼리에 사용되는 특정 SQL 언어 구조는 구체화된 보기를 증분 새로 고침으로 할지 아니면 전체 새로 고침으로 할지를 결정합니다. 새로 고침 방법에 대한 자세한 내용은 REFRESH MATERIALIZED VIEW 섹션을 참조하세요. 증분 새로 고침의 제한 사항에 대한 자세한 내용은 증분 새로 고침에 대한 제한 사항 섹션을 참조하세요.
쿼리에 증분 새로 고침을 지원하지 않는 SQL 명령이 포함된 경우 Amazon Redshift는 구체화된 뷰가 전체 새로 고침 사용을 알리는 메시지를 표시합니다. SQL 클라이언트 애플리케이션에 따라 메시지가 표시될 수도 있고 표시되지 않을 수도 있습니다. 구체화된 보기에서 사용되는 새로 고침 유형을 보려면 STV_MV_INFO의
state
열을 확인합니다. - AUTO REFRESH
-
구체화된 뷰가 기본 테이블의 최신 변경 사항으로 자동으로 새로 고쳐져야 하는지 여부를 정의하는 절입니다. 기본 값은
NO
입니다. 자세한 내용은 구체화된 뷰 새로 고침 단원을 참조하십시오.
사용 노트
구체화된 보기를 생성하려면 다음 권한이 있어야 합니다.
-
스키마에 대한 CREATE 권한
-
구체화된 뷰를 생성하기 위한 기본 테이블에 대한 테이블 수준 또는 열 수준 SELECT 권한입니다. 특정 열에 대한 열 수준 권한이 있는 경우 해당 열에 대해서만 구체화된 뷰를 생성할 수 있습니다.
데이터 공유의 구체화된 뷰에 대한 증분 새로 고침
Amazon Redshift는 기본 테이블이 공유될 때 소비자 데이터 공유의 구체화된 뷰에 대한 자동 및 증분 새로 고침을 지원합니다. 증분 새로 고침은 Amazon Redshift가 이전 새로 고침 이후에 발생한 기본 테이블의 변경 사항을 식별하고 구체화된 뷰의 해당 레코드만 업데이트하는 작업입니다. 이는 전체 새로 고침보다 더 빠르게 실행되며 워크로드 성능을 개선합니다. 증분 새로 고침을 활용하기 위해 구체화된 뷰 정의를 변경할 필요는 없습니다.
구체화된 뷰에서 증분 새로 고침을 활용할 때는 다음과 같은 몇 가지 제한 사항이 있습니다.
구체화된 뷰는 로컬 또는 원격 데이터베이스 하나만 참조해야 합니다.
증분 새로 고침은 새 구체화된 뷰에서만 사용할 수 있습니다. 따라서 증분 새로 고침이 발생하려면 기존의 구체화된 뷰를 삭제하고 다시 생성해야 합니다.
데이터 공유에서 구체화된 뷰를 생성하는 방법에 대한 자세한 내용은 여러 쿼리 예제가 Amazon Redshift 데이터 공유에서 보기 작업을 참조하세요.
구체화된 보기 또는 기본 테이블에 대한 DDL 업데이트
Amazon Redshift에서 구체화된 뷰를 사용하는 경우 구체화된 뷰 또는 기본 테이블에 대한 데이터 정의 언어(DDL) 업데이트와 관련된 다음 사용 노트를 따릅니다.
-
기본 테이블을 참조하는 구체화된 보기에 영향을 주지 않고 기본 테이블에 열을 추가할 수 있습니다.
-
일부 작업은 구체화된 보기를 전혀 새로 고칠 수 없는 상태로 둘 수 있습니다. 예를 들어, 열 이름 바꾸기 또는 삭제, 열 유형 변경 및 스키마 이름 변경 등의 작업이 그렇습니다. 이러한 구체화된 보기는 쿼리할 수 있지만 새로 고칠 수는 없습니다. 이 경우 구체화된 보기를 삭제하고 다시 생성해야 합니다.
-
일반적으로 구체화된 보기의 정의(해당 SQL 문)는 변경할 수 없습니다.
-
구체화된 보기의 이름을 바꿀 수 없습니다.
제한 사항
다음 중 하나를 참조 또는 포함하는 구체화된 보기를 정의할 수 없습니다.
-
표준 뷰 또는 시스템 테이블 및 뷰.
-
임시 테이블.
-
사용자 정의 함수.
-
ORDER BY, LIMIT 또는 OFFSET 절
-
기본 테이블에 대한 지연 바인딩 참조 다시 말해, 구체화된 보기의 SQL 쿼리 정의에서 참조된 기본 테이블 또는 관련 열이 존재해야 하며 유효해야 합니다.
-
리더 노드 전용 함수: CURRENT_SCHEMA, CURRENT_SCHEMAS, HAS_DATABASE_PRIVILEGE, HAS_SCHEMA_PRIVILEGE, HAS_TABLE_PRIVILEGE.
구체화된 뷰 정의에 변경 가능한 함수 또는 외부 스키마가 포함된 경우 AUTO REFRESH YES 옵션을 사용할 수 없습니다. 또한 다른 구체화된 뷰에서 구체화된 뷰를 정의할 때도 사용할 수 없습니다.
구체화된 뷰에서 ANALYZE를 수동으로 실행할 필요가 없습니다. 이는 현재 AUTO ANALYZE를 통해서만 이루어집니다. 자세한 내용은 테이블 분석 단원을 참조하십시오.
예시
다음 예에서는 조인 및 집계되는 3개의 기본 테이블에서 구체화된 뷰를 생성합니다. 각 행은 판매된 티켓 수가 있는 범주를 나타냅니다. tickets_mv 구체화된 보기를 쿼리할 때 tickets_mv 구체화된 보기에서 미리 계산된 데이터에 직접 액세스합니다.
CREATE MATERIALIZED VIEW tickets_mv AS select catgroup, sum(qtysold) as sold from category c, event e, sales s where c.catid = e.catid and e.eventid = s.eventid group by catgroup;
다음 예제에서는 이전 예제와 유사한 구체화된 뷰를 생성하고 집계 함수 MAX()를 사용합니다.
CREATE MATERIALIZED VIEW tickets_mv_max AS select catgroup, max(qtysold) as sold from category c, event e, sales s where c.catid = e.catid and e.eventid = s.eventid group by catgroup; SELECT name, state FROM STV_MV_INFO;
다음 예에서는 UNION ALL 절을 사용하여 Amazon Redshift public_sales
테이블과 Redshift Spectrum spectrum.sales
테이블을 조인하여 구체화된 뷰 mv_sales_vw
를 생성합니다. Amazon Redshift Spectrum의 CREATE EXTERNAL TABLE 명령에 대한 자세한 내용은 CREATE EXTERNAL TABLE 섹션을 참조하세요. Redshift Spectrum 외부 테이블은 Amazon S3의 데이터를 참조합니다.
CREATE MATERIALIZED VIEW mv_sales_vw as select salesid, qtysold, pricepaid, commission, saletime from public.sales union all select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales
다음 예에서는 연합 쿼리 외부 테이블을 기반으로 구체화된 보기 mv_fq
를 생성합니다. 연합 쿼리에 대한 자세한 내용은 CREATE EXTERNAL SCHEMA 섹션을 참조하세요.
CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example; select firstname, lastname from mv_fq; firstname | lastname -----------+---------- John | Day Jane | Doe (2 rows)
다음 예에서는 구체화된 보기의 정의를 보여줍니다.
SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true); pg_get_viewdef --------------------------------------------------- create materialized view mv_sales_vw as select a from t;
다음 샘플은 구체화된 뷰 정의에서 AUTO REFRESH를 설정하는 방법을 보여주고 DISTSTYLE도 지정합니다. 먼저 간단한 기본 테이블을 생성합니다.
CREATE TABLE baseball_table (ball int, bat int);
그런 다음 구체화된 뷰를 생성합니다.
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
이제 mv_baseball 구체화된 뷰를 쿼리할 수 있습니다. 구체화된 뷰에 대해 AUTO REFRESH가 켜져 있는지 확인하려면 STV_MV_INFO을 참조하십시오.
다음 샘플은 다른 데이터베이스의 소스 테이블을 참조하는 구체화된 뷰를 생성합니다. 소스 테이블인 database_A를 포함하는 데이터베이스가 database_B에서 생성한 구체화된 뷰와 동일한 클러스터 또는 작업 그룹에 있다고 가정합니다. (샘플을 자체 데이터베이스로 대체할 수 있습니다.) 먼저 cities라는 database_A에 cityname 열이 있는 테이블을 생성합니다. 열의 데이터 유형을 VARCHAR로 설정합니다. 소스 테이블을 생성한 후 database_B에서 다음 명령을 실행하여 소스가 cities 테이블인 구체화된 뷰를 생성합니다. FROM 절에 소스 테이블의 데이터베이스와 스키마를 지정해야 합니다.
CREATE MATERIALIZED VIEW cities_mv AS SELECT cityname FROM database_A.public.cities;
생성한 구체화된 뷰를 쿼리합니다. 쿼리는 원본 소스가 database_A의 cities 테이블인 레코드를 검색합니다.
select * from cities_mv;
SELECT 명령문을 실행하면 cities_mv가 레코드를 반환합니다. REFRESH 명령문을 실행할 때만 소스 테이블에서 레코드가 새로 고쳐집니다. 또한 구체화된 뷰에서는 레코드를 직접 업데이트할 수 없습니다. 구체화된 뷰의 데이터 새로 고침에 대한 자세한 내용은 REFRESH MATERIALIZED VIEW 섹션을 참조하세요.
구체화된 보기 개요와 구체화된 보기를 새로 고치고 삭제하는 데 사용되는 SQL 명령에 대한 자세한 내용은 다음 주제를 참조하십시오.