AWS Athena - 性能优化

查询优化的最佳实践

AWS Athena 是一种无服务器查询服务,允许您使用标准 SQL 分析存储在 Amazon S3 中的数据。但是,当我们处理大型数据集时,优化查询性能变得非常重要,以确保更快的执行时间并降低成本。

在本章中,我们重点介绍了一些在 AWS Athena 中提高查询性能的最佳实践。

对数据进行分区

分区是优化 AWS Athena 中查询性能的最有效方法之一。您可以根据日期、区域或产品类别等列将数据划分为子集。它的好处是 AWS Athena 只扫描相关分区,而不是整个数据集,这可以显著减少查询时间和扫描的数据量。

如何对数据进行分区?

创建表时可以使用 PARTITIONED BY 子句。

示例

请看以下示例 −

CREATE EXTERNAL TABLE IF NOT EXISTS your_table_name (
   column1 STRING,
   column2 INT
)
PARTITIONED BY (year STRING, month STRING)
LOCATION 's3://your-bucket/folder/';

创建表后,使用 MSCK REPAIR TABLE 命令加载分区,如下所示 −

MSCK REPAIR TABLE your_table_name;

优化文件大小和格式

要优化查询,您应该选择正确的文件大小和数据格式。让我们看看查询时需要记住的有关文件大小和文件格式的一些要点 −

有关文件大小的要点

  • Aws Athena 处理多个小文件的效率低下,因此小文件可能会导致更高的成本。因此,文件不应太小。
  • 另一方面,非常大的文件会降低性能,因为它们需要更长的时间来读取和处理。
  • 建议将文件大小保持在128 MB 和 1 GB之间,以保持效率和性能之间的平衡。

关于文件格式的要点

列格式(如 Parquet 和 ORC)非常适合 AWS Athena。这些格式按列而不是行存储数据,这意味着 Athena 只读取您查询的列。

例如,如果您从包含 10 列的数据集中仅查询 3 列,则列格式将仅扫描所需的 3 列。这使得查询速度更快,并减少了扫描的数据。

诸如ParquetORC之类的格式也支持数据压缩,这可以进一步提高性能。

使用压缩

您应该在将数据存储到 Amazon S3 之前对其进行压缩,因为它可以提高 AWS Athena 中的查询性能。众所周知,压缩可以减小数据的大小,这意味着 Athena 在执行查询时需要扫描的数据更少。

Gzip、SnappyZlib是 Athena 中支持的一些压缩格式。

使用选择性查询限制数据扫描

如果您想优化性能并降低查询成本,请尝试不要使用 Athena 中的SELECT*查询扫描整个表。相反,请始终只选择您分析所需的特定列。您扫描的数据越多,Athena 处理查询所需的时间和资源就越多,这将增加执行时间和成本。

例如,使用下面的查询代替 SELECT*

SELECT column1, column2 FROM your_table WHERE condition;

对重复查询使用缓存

AWS Athena 为我们提供了 结果缓存 功能,可将查询结果存储长达 45 天。如果您在 45 天内运行相同的查询,Athena 将立即返回缓存的结果,而无需重新处理数据,这意味着它不需要扫描新数据。

这个出色的功能不仅提高了性能,还降低了查询成本。