使用 Amazon Redshift Spectrum 的最佳实践 - AWS 规范性指导

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

使用 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_partitioneds3_scanned_rows/bytess3_returned_rows/bytes 值。

Redshift Spectrum 中的谓词下推

使用谓词下推可以避免消耗 Amazon Redshift 集群中的资源。您可以将许多 SQL 操作下推至 Redshift Spectrum 层。我们建议尽可能利用此功能。

记住以下内容:

  • 您可以完全在 Redshift Spectrum 层评估某些类型的 SQL 操作,包括以下各项:

    • GROUP BY 子句

    • 比较和模式匹配条件(例如,LIKE

    • 聚合函数(例如,COUNTSUMAVGMINMAX

    • regex_replaceto_upperdate_trunc 和其他函数

  • 您无法将某些操作推送到 Redshift Spectrum 层,包括 DISTINCTORDER 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 TABLEALTER 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 层时,整体性能都会提升。