구체화된 뷰가 있는 SUPER 열로 나누기
Amazon Redshift가 있으면 구체화된 뷰를 사용하여 SUPER 열로 데이터를 파쇄하여 쿼리 성능을 개선하고 스토리지 요구 사항을 줄일 수 있습니다. 파쇄는 반정형 JSON 또는 XML 등 복잡한 데이터 유형을 더 작고 평평한 열로 세분화하는 프로세스를 말합니다. SUPER 열은 파쇄된 데이터를 빠르게 스캔하는 데 최적화된 특수한 형태의 열 스토리지입니다.
다음 섹션에서는 Amazon Redshift에서 구체화된 뷰를 사용하여 SUPER 열로 데이터를 파쇄하는 단계와 고려 사항을 설명합니다.
다음 예에서는 결과 열이 여전히 SUPER 데이터 형식인 중첩 데이터를 나누는 구체화된 뷰를 보여줍니다.
SELECT c.c_name, o.o_orderstatus
FROM customer_orders_lineitem c, c.c_orders o;
다음 예에서는 나뉜 데이터에서 기존의 Amazon Redshift 스칼라 열을 생성하는 구체화된 뷰를 보여줍니다.
SELECT c.c_name, c.c_orders[0].o_totalprice
FROM customer_orders_lineitem c;
단일 구체화된 뷰 super_mv를 생성하여 두 쿼리를 모두 가속화할 수 있습니다.
첫 번째 쿼리에 응답하려면 속성 o_orderstatus를 구체화해야 합니다. 중첩 탐색이나 중첩 해제를 포함하지 않기 때문에 속성 c_name을 생략할 수 있습니다. 구체화된 뷰에 customer_orders_lineitem의 속성 c_custkey를 포함해야 구체화된 뷰와 기본 테이블을 조인할 수 있습니다.
두 번째 쿼리에 응답하려면 속성 o_totalprice 및 c_orders의 배열 인덱스 o_idx도 구체화해야 합니다. 따라서 c_orders의 인덱스 0에 액세스할 수 있습니다.
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey) AS (
SELECT c_custkey, o.o_orderstatus, o.o_totalprice, o_idx
FROM customer_orders_lineitem c, c.c_orders o AT o_idx
);
구체화된 뷰 super_mv의 속성 o_orderstatus 및 o_totalprice는 SUPER입니다.
구체화된 뷰 super_mv는 기본 테이블 customer_orders_lineitem이 변경되면 점진적으로 새로 고쳐집니다.
REFRESH MATERIALIZED VIEW super_mv;
INFO: Materialized view super_mv was incrementally updated successfully.
첫 번째 PartiQL 쿼리를 일반 SQL 쿼리로 다시 작성하려면 다음과 같이 customer_orders_lineitem을 super_mv와 조인합니다.
SELECT c.c_name, v.o_orderstatus
FROM customer_orders_lineitem c
JOIN super_mv v ON c.c_custkey = v.c_custkey;
마찬가지로 두 번째 PartiQL 쿼리를 다시 작성할 수 있습니다. 다음 예에서는 o_idx = 0에 대한 필터를 사용합니다.
SELECT c.c_name, v.o_totalprice
FROM customer_orders_lineitem c
JOIN super_mv v ON c.c_custkey = v.c_custkey
WHERE v.o_idx = 0;
CREATE MATERIALIZED VIEW 명령에서 c_custkey를 배포 키로 지정하고 super_mv에 대한 정렬 키로 지정합니다. Amazon Redshift는 c_custkey가 customer_orders_lineitem의 배포 키이자 정렬 키라고 가정하고 효율적인 병합 조인을 수행합니다. 그렇지 않은 경우 다음과 같이 c_custkey를 customer_orders_lineitem의 정렬 키와 배포 키로 지정할 수 있습니다.
ALTER TABLE customer_orders_lineitem
ALTER DISTKEY c_custkey, ALTER SORTKEY (c_custkey);
EXPLAIN 문을 사용하여 Amazon Redshift가 재작성된 쿼리에 대해 병합 조인을 수행하는지 확인합니다.
EXPLAIN
SELECT c.c_name, v.o_orderstatus
FROM customer_orders_lineitem c JOIN super_mv v ON c.c_custkey = v.c_custkey;
QUERY PLAN
------------------------------------------------------------------------------------------------------
XN Merge Join DS_DIST_NONE (cost=0.00..34701.82 rows=1470776 width=27)
Merge Cond: ("outer".c_custkey = "inner".c_custkey)
-> XN Seq Scan on mv_tbl__super_mv__0 derived_table2 (cost=0.00..14999.86 rows=1499986 width=13)
-> XN Seq Scan on customer_orders_lineitem c (cost=0.00..999.96 rows=99996 width=30)
(4 rows)