View a markdown version of this page

從分解的資料建立 Amazon Redshift 純量欄 - Amazon Redshift

Amazon Redshift 將不再支援在 2026 年 6 月 30 日之後使用 Python UDFs。我們將開始分階段強制執行。如需 Python 生命週期結束和遷移選項的詳細資訊,請參閱 2025 年 6 月 30 日發佈的部落格文章

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

從分解的資料建立 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)