使用分解数据创建 Amazon Redshift 标量列 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用分解数据创建 Amazon Redshift 标量列

了解存储到 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)