从已拆分的数据中创建Amazon Redshift标量列 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从已拆分的数据中创建Amazon Redshift标量列

存储在 SUPER 中的无架构数据可能会影响 的性能Amazon Redshift。例如,筛选谓词和/或联接条件,因为限制范围的扫描无法有效地使用区域映射。用户和 BI 工具可以使用具体化视图作为传统的架构化数据呈现形式,并提高分析查询的性能。

以下查询扫描具体化视图 upper_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 | t 1 | t 5 | t 4 | t 2 | t 3 | t (6 rows)

以下示例将调整具体化视图 upper_mv 以从已销毁的数据中创建标量列。在这种情况下, 将 o_orderstatus 从 SUPER Amazon Redshift 强制转换为 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 -------+----------- 4 | f 5 | f 1 | f 0 | f 3 | f 2 | f (6 rows)