

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 從分解的資料建立 Amazon Redshift 純量欄
<a name="r_create_scalar"></a>

儲存在 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)
```