구체화된 뷰를 사용하기 위한 자동 쿼리 재작성 - Amazon Redshift

구체화된 뷰를 사용하기 위한 자동 쿼리 재작성

Amazon Redshift에서 구체화된 뷰의 자동 쿼리 재작성을 사용하여 Amazon Redshift가 구체화된 뷰를 사용하도록 쿼리를 재작성하도록 할 수 있습니다. 이렇게 하면 구체화된 뷰를 명시적으로 참조하지 않는 쿼리의 경우에도 쿼리 워크로드가 가속화됩니다. Amazon Redshift는 쿼리를 재작성할 때 최신 구체화된 보기만 사용합니다.

사용 노트

쿼리 자동 재작성이 쿼리에 사용되는지 확인하려면 쿼리 계획 또는 STL_EXPLAIN을 검사합니다. 다음은 SELECT 문과 원래 쿼리 계획의 EXPLAIN 출력을 보여줍니다.

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 1; EXPLAIN XN HashAggregate (cost=920021.24..920021.24 rows=1 width=35) -> XN Hash Join DS_BCAST_INNER (cost=440004.53..920021.22 rows=4 width=35) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales s (cost=0.00..7.40 rows=740 width=6) -> XN Hash (cost=440004.52..440004.52 rows=1 width=37) -> XN Hash Join DS_BCAST_INNER (cost=0.01..440004.52 rows=1 width=37) Hash Cond: ("outer".catid = "inner".catid) -> XN Seq Scan on event e (cost=0.00..2.00 rows=200 width=6) -> XN Hash (cost=0.01..0.01 rows=1 width=35) -> XN Seq Scan on category c (cost=0.00..0.01 rows=1 width=35)

다음은 성공적인 자동 재작성 후 EXPLAIN 출력을 보여줍니다. 이 출력에는 원래 쿼리 계획의 일부를 대체하는 쿼리 계획의 구체화된 뷰에 대한 스캔이 포함됩니다.

* EXPLAIN XN HashAggregate (cost=11.85..12.35 rows=200 width=41) -> XN Seq Scan on mv_tbl__tickets_mv__0 derived_table1 (cost=0.00..7.90 rows=790 width=41)

자동, 예약 또는 수동과 같은 새로 고침 전략에 관계없이 쿼리의 자동 재작성을 위해 최신(새로운) 구체화된 뷰만 고려됩니다. 따라서 원래 쿼리는 최신 결과를 반환합니다. 구체화된 뷰가 쿼리에서 명시적으로 참조되는 경우 Amazon Redshift는 구체화된 뷰에 현재 저장된 데이터에 액세스합니다. 이 데이터는 구체화된 뷰의 기본 테이블에서 최신 변경 사항을 반영하지 않을 수 있습니다.

클러스터 버전 1.0.20949 이상에서 생성된 구체화된 뷰의 자동 쿼리 재작성을 사용할 수 있습니다.

FALSE로 SET mv_enable_aqmv_for_session을 사용하여 세션 수준에서 자동 쿼리 재작성을 중지할 수 있습니다.

구체화된 뷰의 자동 쿼리 재작성 작동 방식

내부 최적화를 기반으로 Amazon Redshift는 쿼리 시간을 최소화하면서 최적의 쿼리 실행을 제공하기 위해 구체화된 뷰의 자동 쿼리 재작성을 투명하게 간접적으로 호출하기로 결정할 수 있습니다.

예를 들어, 사용자 A가 SELECT * FROM T1 쿼리를 사용하여 테이블 T1에 대한 구체화된 뷰 M1을 생성한다고 가정해 보겠습니다. 사용자 A는 T1에 대한 모든 SELECT 권한을 가지고 있습니다. 사용자 A는 사용자 B를 포함한 모든 사용자에게 M1에 대한 액세스 권한을 부여합니다. 그러나 사용자 B가 T1을 직접 쿼리하려고 하면 액세스가 거부됩니다. 이는 사용자 B에게 T1에 대한 SELECT 권한이 없기 때문입니다.

얼마 후 사용자 B가 다시 T1에 대한 쿼리를 시도하는데 이번에는 T1에서 결과를 받습니다. 이는 구체화된 뷰를 사용한 자동 쿼리 재작성이 사용자 B의 테이블 T1에 대한 쿼리(SELECT <cols> FROM T1)를 구체화된 뷰 M1에 대한 쿼리(SELECT <cols> FROM M1)로 재작성했기 때문입니다.

제한 사항

다음은 구체화된 뷰의 자동 쿼리 재작성 사용에 대한 제한 사항입니다.

  • 자동 쿼리 재작성은 다음 중 하나를 참조하거나 포함하지 않는 구체화된 뷰에서 작동합니다.

    • 하위 쿼리

    • 왼쪽, 오른쪽 또는 전체 외부 조인

    • 설정 연산

    • SUM, COUNT, MIN, MAX, AVG를 제외한 모든 집계 함수. (이런 집계 함수에서만 자동 쿼리 재작성이 작동합니다.)

    • DISTINCT가 포함된 모든 집계 함수

    • 모든 윈도 함수

    • SELECT DISTINCT 또는 HAVING 절

    • 외부 또는 공유 테이블

    • 다른 구체화된 뷰

  • 자동 쿼리 재작성은 사용자 정의 Amazon Redshift 테이블을 참조하는 SELECT 쿼리를 재작성합니다. Amazon Redshift는 다음 쿼리를 재작성하지 않습니다.

    • CREATE TABLE AS 문

    • SELECT INTO 문

    • 카탈로그 또는 시스템 테이블에 대한 쿼리

    • 외부 조인 또는 SELECT DISTINCT 절이 있는 쿼리

  • 쿼리가 자동으로 재작성되지 않는 경우 지정된 구체화된 뷰에 대한 SELECT 권한이 있고 mv_enable_aqmv_for_session 옵션이 TRUE로 설정되어 있는지 확인합니다.

    STV_MV_INFO를 검사하여 구체화된 뷰가 쿼리 자동 재작성에 적합한지 확인할 수도 있습니다. 자세한 내용은 STV_MV_INFO 섹션을 참조하세요.