구체화된 뷰 새로 고침 - Amazon Redshift

Amazon Redshift는 2025년 11월 1일부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. Python UDF를 사용하려면 이 날짜 이전에 UDF를 생성하세요. 기존 Python UDF는 정상적으로 계속 작동합니다. 자세한 내용은 블로그 게시물을 참조하세요.

구체화된 뷰 새로 고침

이 주제에서는 기본 테이블에서 구체화된 뷰의 데이터를 새로 고치는 방법을 설명합니다.

구체화된 뷰를 생성할 때 그 콘텐츠는 해당 시점에서 기본 데이터베이스 관계(테이블 또는 기타 구체화된 뷰)의 상태를 반영합니다. 애플리케이션이 기본 테이블의 데이터를 변경하더라도 구체화된 보기의 데이터는 변경되지 않습니다. 구체화된 뷰에서 데이터를 업데이트하기 위해 언제든지 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 쿼리에 따라 구체화된 뷰에 대한 새로 고침 방법을 자동으로 선택합니다.

중첩된 구체화된 뷰

구체화된 뷰를 다른 구체화된 뷰 위에 정의할 수 있습니다. 이러한 구체화된 뷰를 새로 고치려면 최상위 구체화된 뷰를 새로 고칠 때 CASCADE 키워드를 명시적으로 사용해야 합니다. 예를 들어 다음과 같은 중첩된 구체화된 뷰 구조를 가정해보겠습니다.

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; -- w -> v -> u -> t INSERT INTO t VALUES (1);

w를 최신 상태로 만들려면 두 가지 방법을 사용할 수 있습니다.

  • (권장) REFRESH MATERIALIZED VIEW w CASCADE 명령을 사용하여 w를 새로 고칩니다. 이 명령은 단일 트랜잭션에서 모든 구체화된 뷰의 새로 고침을 실행합니다.

  • u, v, w를 종속성 순서(먼저 u, 그 다음 v, 그 다음 w)대로 별도의 명령으로 새로 고칩니다.

CASCADE 키워드를 명시적으로 사용하지 않으면 구체화된 뷰가 RESTRICT 모드로 새로 고쳐지고 현재 구체화된 뷰만 새로 고쳐집니다. 다음 예에서는 오래된 구체화된 뷰에 종속된 구체화된 뷰에 대해 REFRESH MATERIALIZED VIEW를 실행할 때 정보 메시지를 보여줍니다.

REFRESH MATERIALIZED VIEW w; INFO: Materialized view w is already up to date. However, it depends on another materialized view that is not up to date. REFRESH MATERIALIZED VIEW w CASCADE; INFO: Materialized view w was incrementally updated successfully.
REFRESH MATERIALIZED VIEW v; INFO: Materialized view v is already up to date. However, it depends on another materialized view that is not up to date. REFRESH MATERIALIZED VIEW v CASCADE; INFO: Materialized view v was incrementally updated successfully.

위 예시에서 캐스케이드 새로 고침 옵션을 사용하면 구체화된 뷰 u가 먼저 새로 고쳐지고 구체화된 뷰 v가 다음으로 새로 고쳐지며 구체화된 뷰 w는 새로 고쳐지지 않습니다.

다음 예에서는 프로그래밍 방식으로 구체화된 뷰에 대한 전체 새로 고침 계획을 생성하는 방법을 보여줍니다. 구체화된 뷰 v를 새로 고치려면 먼저 구체화된 뷰 u를 새로 고칩니다. 구체화된 뷰 w를 새로 고치려면 먼저 구체화된 뷰 u를 새로 고친 다음 구체화된 뷰 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)

제한 사항

Amazon Redshift는 다음 이외의 소스를 기반으로 구체화된 뷰에 대한 캐스케이드 새로 고침을 지원하지 않습니다.

  • 로컬 테이블

  • 로컬 MV

  • 스트리밍 MV

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 Spectrum의 외부 데이터 레이크 테이블에 대한 구체화된 뷰 섹션을 참조하세요.

구체화된 뷰 자동 새로 고침

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는 데이터 공유 테이블 및 Iceberg 테이블에 정의된 구체화된 뷰에서 지원됩니다.

  • 새로 고침 상태의 경우 사용자가 시작했거나 자동으로 새로 고친 쿼리를 기록하는 SVL_MV_REFRESH_STATUS를 확인할 수 있습니다.

  • 재계산 전용 구체화된 보기에서 REFRESH를 실행하려면 스키마에 대한 CREATE 권한이 있는지 확인합니다. 자세한 내용은 GRANT 섹션을 참조하세요.