구체화된 뷰 새로 고침
구체화된 보기를 생성할 때 그 콘텐츠는 해당 시점에서 기본 데이터베이스 테이블의 상태를 반영합니다. 애플리케이션이 기본 테이블의 데이터를 변경하더라도 구체화된 보기의 데이터는 변경되지 않습니다. 구체화된 뷰에서 데이터를 업데이트하기 위해 언제든지 REFRESH MATERIALIZED VIEW
문을 사용하여 구체화된 뷰를 수동으로 새로 고칠 수 있습니다. 이 문을 사용하면 Amazon Redshift가 기본 테이블 또는 테이블에서 발생한 변경 사항을 식별하고 해당 변경 사항을 구체화된 뷰에 적용합니다.
Amazon Redshift에는 구체화된 뷰 새로 고침을 위한 두 가지 전략이 있습니다.
-
대부분의 경우 Amazon Redshift는 증분 새로 고침을 수행할 수 있습니다. 증분 새로 고침에서는 Amazon Redshift가 마지막 새로 고침 이후 기본 테이블의 데이터 변경 사항을 빠르게 식별하고 구체화된 뷰의 데이터를 업데이트합니다. 증분 새로 고침은 구체화된 뷰를 정의할 때 쿼리에 사용되는 다음 SQL 구문에 지원됩니다.
-
SELECT, FROM, [INNER] JOIN, WHERE, GROUP BY 또는 HAVING 절을 포함하는 구문.
-
SUM, MIN, MAX, AVG, COUNT와 같은 집계를 포함하는 구문.
-
대부분의 내장 SQL 함수, 특히 변경할 수 없는 함수(입력 인수가 동일하고 항상 동일한 출력을 생성하는 경우).
증분 새로 고침은 데이터 공유 테이블을 기반으로 한 구체화된 뷰에서 지원됩니다.
-
-
증분 새로 고침이 불가능하면 Amazon Redshift가 전체 새로 고침을 수행합니다. 전체 새로 고침은 기본 SQL 문을 다시 실행하여 구체화된 보기의 모든 데이터를 대체합니다.
-
Amazon Redshift는 구체화된 뷰를 정의하는 데 사용되는 SELECT 쿼리에 따라 구체화된 뷰에 대한 새로 고침 방법을 자동으로 선택합니다.
구체화된 뷰에 대한 구체화된 뷰를 새로 고치는 것은 계단식 프로세스가 아닙니다. 즉, 구체화된 뷰 B에 종속된 구체화된 뷰 A가 있다고 가정합니다. 이 경우 REFRESH MATERIALIZED VIEW A가 호출되면 B가 오래된 경우에도 현재 버전의 B를 사용하여 A가 새로 고쳐집니다. A를 완전히 최신 상태로 만들려면 A를 새로 고치기 전에 먼저 별도의 트랜잭션에서 B를 새로 고칩니다.
다음 예에서는 프로그래밍 방식으로 구체화된 뷰에 대한 전체 새로 고침 계획을 생성하는 방법을 보여줍니다. 구체화된 뷰 v를 새로 고치려면 먼저 구체화된 뷰 u를 새로 고칩니다. 구체화된 뷰 w를 새로 고치려면 먼저 구체화된 뷰 u를 새로 고친 다음 구체화된 뷰 v를 새로 고칩니다.
CREATE TABLE t(a INT); CREATE MATERIALIZED VIEW u AS SELECT * FROM t; CREATE MATERIALIZED VIEW v AS SELECT * FROM u; CREATE MATERIALIZED VIEW w AS SELECT * FROM v; WITH RECURSIVE recursive_deps (mv_tgt, lvl, mv_dep) AS ( SELECT trim(name) as mv_tgt, 0 as lvl, trim(ref_name) as mv_dep FROM stv_mv_deps UNION ALL SELECT R.mv_tgt, R.lvl+1 as lvl, trim(S.ref_name) as mv_dep FROM stv_mv_deps S, recursive_deps R WHERE R.mv_dep = S.name ) SELECT mv_tgt, mv_dep from recursive_deps ORDER BY mv_tgt, lvl DESC; mv_tgt | mv_dep --------+-------- v | u w | u w | v (3 rows)
다음 예에서는 오래된 구체화된 뷰에 종속된 구체화된 뷰에 대해 REFRESH MATERIALIZED VIEW를 실행할 때 정보 메시지를 보여줍니다.
create table a(a int);
create materialized view b as select * from a;
create materialized view c as select * from b;
insert into a values (1);
refresh materialized view c; INFO: Materialized view c is already up to date. However, it depends on another materialized view that is not up to date.
REFRESH MATERIALIZED VIEW b; INFO: Materialized view b was incrementally updated successfully.
REFRESH MATERIALIZED VIEW c; INFO: Materialized view c was incrementally updated successfully.
Amazon Redshift에는 현재 구체화된 뷰의 증분 새로 고침에 대한 다음과 같은 제한 사항이 있습니다.
Amazon Redshift는 다음 SQL 요소를 사용하는 쿼리로 정의된 구체화된 뷰에 대해 증분 새로 고침을 지원하지 않습니다.
-
OUTER JOIN(RIGHT, LEFT 또는 FULL).
-
설정 연산 UNION, INTERSECT, EXCEPT 및 MINUS.
-
집계 함수 MEDIAN, PERCENTILE_CONT, LISTAGG, STDDEV_SAMP, STDDEV_POP, APPROXIMATE COUNT, APPROXIMATE PERCENTILE 및 비트 단위 집계 함수.
참고
COUNT, SUM, AVG 집계 함수가 지원됩니다.
-
DISTINCT COUNT, DISTINCT SUM 등과 같은 DISTINCT 집계 함수.
창 함수.
일반 하위 표현식 최적화와 같은 쿼리 최적화를 위해 임시 테이블을 사용하는 쿼리입니다.
하위 쿼리.
-
구체화된 뷰를 정의하는 쿼리에서 다음 형식을 참조하는 외부 테이블
-
Delta Lake
-
Hudi
위에 나열된 형식 외의 다른 형식을 사용하는 정의된 구체화된 뷰에 대한 미리 보기 트랙에 증분 새로 고침이 지원됩니다. 미리 보기 클러스터 설정에 대한 자세한 내용은 Amazon Redshift 클러스터 관리 안내서의 미리 보기 클러스터 생성을 참조하세요. 미리 보기 작업 그룹을 설정하는 방법에 대한 내용은 Amazon Redshift 관리 안내서의 미리 보기 작업 그룹 만들기를 참조하세요.
-
구체화된 뷰 자동 새로 고침
Amazon Redshift는 구체화된 뷰가 자동 새로 고침 옵션을 사용하여 생성되거나 변경될 때 기본 테이블의 최신 데이터로 구체화된 뷰를 자동으로 새로 고칠 수 있습니다. Amazon Redshift는 기본 테이블이 변경된 후 가능한 한 빨리 구체화된 뷰를 자동으로 새로 고칩니다.
클러스터의 활성 워크로드에 미치는 영향을 최소화하면서 가장 중요한 구체화된 뷰의 새로 고침을 완료하기 위해 Amazon Redshift는 여러 요소를 고려합니다. 이러한 요소에는 현재 시스템 로드, 새로 고침에 필요한 리소스, 사용 가능한 클러스터 리소스 및 구체화된 뷰가 사용되는 빈도가 포함됩니다.
Amazon Redshift는 자동 새로 고침보다 워크로드의 우선 순위를 지정하고 사용자 워크로드의 성능을 유지하기 위해 자동 새로 고침을 중지할 수 있습니다. 이 접근 방식은 일부 구체화된 뷰의 새로 고침을 지연시킬 수 있습니다. 경우에 따라 구체화된 뷰에 대해 보다 결정적인 새로 고침 동작이 필요할 수 있습니다. 이 경우에는 REFRESH MATERIALIZED VIEW에 설명된 대로 수동 새로 고침을 사용하거나 Amazon Redshift 스케줄러 API 작업 또는 콘솔을 사용하여 예약된 새로 고침을 사용하는 것이 좋습니다.
CREATE MATERIALIZED VIEW를 사용하여 구체화된 뷰에 대한 자동 새로 고침을 설정할 수 있습니다. 또한 AUTO REFRESH 절을 사용하여 구체화된 뷰를 자동으로 새로 고칠 수 있습니다. 구체화된 뷰 생성에 대한 자세한 내용은 CREATE MATERIALIZED VIEW 섹션을 참조하세요. ALTER MATERIALIZED VIEW로 현재 구체화된 보기에 자동 새로 고침을 사용할 수 있습니다.
구체화된 뷰를 새로 고칠 때 다음 사항을 고려하세요.
구체화된 뷰에 자동 새로 고침을 사용하지 않아도 REFRESH MATERIALIZED VIEW 명령을 사용하여 구체화된 뷰를 명시적으로 새로 고칠 수 있습니다.
Amazon Redshift는 외부 테이블에 정의된 구체화된 뷰를 자동으로 새로 고치지 않습니다.
새로 고침 상태의 경우 사용자가 시작했거나 자동으로 새로 고친 쿼리를 기록하는 SVL_MV_REFRESH_STATUS를 확인할 수 있습니다.
재계산 전용 구체화된 보기에서 REFRESH를 실행하려면 스키마에 대한 CREATE 권한이 있는지 확인합니다. 자세한 내용은 GRANT 단원을 참조하십시오.