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、Snappy和Zlib是 Athena 中支持的一些压缩格式。
使用选择性查询限制数据扫描
如果您想优化性能并降低查询成本,请尝试不要使用 Athena 中的SELECT*查询扫描整个表。相反,请始终只选择您分析所需的特定列。您扫描的数据越多,Athena 处理查询所需的时间和资源就越多,这将增加执行时间和成本。
例如,使用下面的查询代替 SELECT* −
SELECT column1, column2 FROM your_table WHERE condition;
对重复查询使用缓存
AWS Athena 为我们提供了 结果缓存 功能,可将查询结果存储长达 45 天。如果您在 45 天内运行相同的查询,Athena 将立即返回缓存的结果,而无需重新处理数据,这意味着它不需要扫描新数据。
这个出色的功能不仅提高了性能,还降低了查询成本。