從切碎的數據中創建亞馬遜 Redshift 標量列 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從切碎的數據中創建亞馬遜 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從超級到瓦爾卡爾. 此外,請指定o_orderstatus作為排序索引鍵super_mv

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)