本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用亚马逊 Redshift Spectrum 的最佳实践
本节概述了使用亚马逊 Redshift Spectrum 的最佳实践。我们建议您在使用 Redshift Spectrum 时遵循以下最佳实践,以实现最佳性能:
-
请考虑文件类型会对 Redshift Spectrum 查询性能产生重大影响。为了提高性能,请使用列式编码文件,例如 ORC 或 Parquet,并且仅对非常小的维度表使用 CSV 格式。
-
使用基于前缀的分区来利用分区修剪的优势。这意味着要使用与数据湖中的分区密钥关联的过滤器。
-
Redshift Spectrum 会自动缩放以处理大型请求,因此在 Redshift Spectrum 中尽可能多地进行扩展(例如,谓词下推)。
-
注意经常过滤的列上的分区文件。如果数据按一个或多个筛选列进行分区,Redshift Spectrum 可以利用分区修剪的优势,跳过对不需要的分区和文件的扫描。常见做法是根据时间对数据进行分区。
-
您可以使用以下查询来检查分区的有效性以及 Redshift Spectrum 查询的效率。
Select query, segment, max(assigned_partitions) as total_partitions, max(qualified_partitions) as qualified_partitions From svl_s3partition Where query=pg_last_query_id() Group by 1,2;
前面的查询显示了以下内容:
-
total_part itions — 识别的分区数量 AWS Glue Data Catalog
-
qualified_partitions — 在 Red shift Spectrum 查询中访问的亚马逊简单存储服务 (Amazon S3) Simple Service 上的前缀数量
-
-
您还可以查看
SVL_S3QUERY_SUMMARY
系统表,了解分区的有效性以及 Redshift Spectrum 查询的效率。为此,请使用以下语句。Select * From svl_s3query_summary Where query=pg_last_query_id();
除了显示分区修剪效率的文件外
is_partitioned
s3_scanned_rows/bytes
,前面的查询还会返回更多信息,包括、和s3_returned_rows/bytes
值。
Redshift Spectrum 中的谓词下推
使用谓词下推可以避免消耗 Amazon Redshift 集群中的资源。你可以将许多 SQL 操作推送到 Redshift Spectrum 层。我们建议尽可能利用这一优势。
记住以下内容:
-
你可以完全在 Redshift Spectrum 层中评估某些类型的 SQL 操作,包括以下内容:
-
GROUP BY
条款 -
比较和模式匹配条件(例如,)
LIKE
-
聚合函数(例如
COUNT
、SUM
、AVG
、MIN
、和MAX
) -
regex_replace
、to_upper
date_trunc
、和其他函数
-
-
你无法将某些操作推送到 Redshift Spectrum 层,包括
DISTINCT
和。ORDER BY
如果可能,请ORDER BY
仅在查询的顶层执行,因为排序是在领导节点中完成的。 -
检查您的查询
EXPLAIN
计划以验证谓词下推是否有效。要在EXPLAIN
命令中查找 Redshift Spectrum 部分,请执行以下步骤:-
S3 Seq Scan
-
S3 HashAggregate
-
S3 Query Scan
-
Seq Scan PartitionInfo
-
Partition Loop
-
-
在查询中使用最少的列数。如果数据采用 Parquet 或 ORC 格式,Redshift Spectrum 可以消除要扫描的列。
-
广泛使用分区进行并行处理和消除分区,并尽可能将文件大小保持在至少 64 MB。
-
TABLE PROPERTIES
'numRows'='nnn'
如果您使用CREATE EXTERNAL TABLE
或,则设置ALTER TABLE
。Amazon Redshift 不会通过分析外部表来生成查询优化器用来生成查询计划的表统计数据。如果未设置统计数据,那么 Amazon Redshift 会假设外部表是较大的表,而本地表是较小的表。
Redshift Spectrum 的查询调整技巧
我们建议您在调整查询时记住以下几点:
-
您的 Amazon Redshift 集群可以用于查询的 Redshift Spectrum 节点的数量与集群中的切片数量有关。
-
调整集群大小可以使集群的本地计算配置文件、存储配置文件以及 Amazon S3 数据湖查询的查询功能受益。
-
Amazon Redshift 查询计划程序会将谓词和聚合尽可能推至 Redshift Spectrum 查询层。
-
如果从 Amazon S3 返回了大量数据,则处理将受您的集群的资源的限制。
-
由于 Redshift Spectrum 会自动扩展以处理大型请求,因此只要您可以将处理推送到 Redshift Spectrum 层,您的整体性能就会得到改善。