

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 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 中的无 schema 数据会影响 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)
```