細断されたデータからの Amazon Redshift スカラー列の作成 - Amazon Redshift

細断されたデータからの 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)