本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Redshift Spectrum 的最佳实践
本节概述使用 Amazon 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_partitions:AWS Glue Data Catalog 识别的分区数量
-
qualified_partitions:Redshift Spectrum 查询访问的 Amazon Simple Storage Service(Amazon S3)前缀数量
-
-
您还可以查看
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。
-
如果您使用
CREATE EXTERNAL TABLE或ALTER TABLE,请设置TABLE PROPERTIES'numRows'='nnn'。Amazon Redshift 不分析外部表来生成表统计数据,查询优化器会使用这些统计数据来生成查询计划。如果未设置统计信息,则 Amazon Redshift 假设外部表较大,本地表较小。
Redshift Spectrum 的查询调优提示
我们建议您在查询调优时牢记以下几点:
-
您的 Amazon Redshift 集群可参与查询的 Redshift Spectrum 节点数量与集群中的切片数量相关。
-
扩大集群的规模可以提升集群的本地计算配置文件、存储配置文件以及 Amazon S3 数据湖查询的查询能力。
-
Amazon Redshift 查询计划程序会将谓词和聚合尽可能推至 Redshift Spectrum 查询层。
-
如果从 Amazon S3 返回了大量数据,则处理将受您的集群的资源的限制。
-
由于 Redshift Spectrum 会自动扩展以处理大型请求,因此每当能够将处理推至 Redshift Spectrum 层时,整体性能都会提升。