細断されたデータからの Amazon Redshift スカラー列の作成
SUPER に保存されているスキーマレスデータは、Amazon Redshift のパフォーマンスに影響を与える可能性があります。例えば、範囲が制限されたスキャンではゾーンマップを効果的に使用できないため、述語や結合条件をフィルタリングします。ユーザーと BI ツールは、データの従来の表示としてマテリアライズドビューを使用し、分析クエリのパフォーマンスを向上させることができます。
次のクエリは、マテリアライズドビュー super_mv
をスキャンし、o_orderstatus
でフィルタリングします。
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_orderstatus = 'F';
stl_scan
を調べて、Amazon Redshift が o_orderstatus
の範囲制限スキャンでゾーンマップを効果的に使用できないことを確認します。
SELECT slice, is_rrscan FROM stl_scan
WHERE query = pg_last_query_id() AND perm_table_name LIKE '%super_mv%';
slice | is_rrscan
-------+-----------
0 | f
1 | f
5 | f
4 | f
2 | f
3 | f
(6 rows)
次の例では、マテリアライズドビュー super_mv
を使用して、細断されたデータからスカラー列を作成します。この場合、Amazon Redshift は o_orderstatus
を SUPER から VARCHAR にキャストします。さらに、super_mv
のソートキーとして o_orderstatus
を指定します。
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey, o_orderstatus) AS (
SELECT c_custkey, o.o_orderstatus::VARCHAR AS o_orderstatus, o.o_totalprice, o_idx
FROM customer_orders_lineitem c, c.c_orders o AT o_idx
);
クエリを再実行した後、Amazon Redshift がゾーンマップを使用できることを確認します。
SELECT v.o_totalprice
FROM super_mv v
WHERE v.o_orderstatus = 'F';
次のように、範囲が制限されたスキャンでゾーンマップが使用されるようになったことを確認できます。
SELECT slice, is_rrscan FROM stl_scan
WHERE query = pg_last_query_id() AND perm_table_name LIKE '%super_mv%';
slice | is_rrscan
-------+-----------
0 | t
1 | t
2 | t
3 | t
4 | t
5 | t
(6 rows)