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 列。这使得查询速度更快并减少了扫描的数据量。

Parquet 和 ORC 等格式还支持数据压缩,这可以进一步提高性能。

使用压缩

您应该在将数据存储到 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 将立即返回缓存的结果,而无需重新处理数据,这意味着它不需要扫描新数据。

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

广告