本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從分解的資料建立 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。此外,請指定 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)