Amazon Athena 是一款基于开源框架的无服务器交互式分析服务,可让您分析其所在位置的 PB 级数据。借助 Athena,您可以使用 SQL 或 Apache Spark,无需设置或管理基础设施。定价很简单:您根据处理的数据或使用的计算支付费用。
为了开始使用,您创建一个工作组,将允许您指定查询引擎,即您在 Amazon Simple Storage Service(S3)中用于存储执行结果、AWS Identity and Access Management(IAM)角色(如需要),以及您的资源标签的工作目录。您可以使用工作组区分用户、团队、应用程序或工作负载,为每个查询或整个工作组可以处理的数据量设置上限,并跟踪费用。根据您创建的工作组,您可以 (a) 运行 SQL 查询并基于扫描的数据或使用的计算支付费用,或 (b) 运行 Apache Spark Python 代码并按小时为执行代码支付费用。
SQL 查询
带预置容量的 SQL 查询
Apache Spark
额外费用
Amazon Athena 直接从 Amazon S3 中查询数据。使用 Athena 查询数据无需额外支付存储费用。您将按标准 S3 费率支付存储、请求和数据传输费用。默认情况下,查询结果存储在您选择的 S3 存储桶中,也按标准 Amazon S3 费率计费。
- 当您的工作负载读取、存储和传输数据时,S3 会向您收费。 这包括成功和不成功的查询。默认情况下,SQL 查询结果和 Spark 计算结果存储在您选择的 S3 存储桶中,并按标准 S3 费率计费。有关更多信息,请参阅 Amazon S3 定价。
- 如果您将 AWS Glue Data Catalog 与 Athena 结合使用,则需要按标准数据目录费率支付费用。有关详细信息,请访问 AWS Glue 定价页面。
- 除非使用预置容量,否则对联合数据来源(未存储在 S3 上的数据)的 SQL 查询按 Athena 扫描的每 TB 字节计费(四舍五入到最接近的 MB 字节),每个查询的最小值为 10MB 字节。此类查询也在您的账户中调用 AWS Lambda 函数,需要按照标准费率向您收取 Lambda 使用费。联合查询调用的 Lambda 函数可适用 Lambda 免费套餐。有关详细信息,请访问 Lambda 定价页面。
定价示例
示例 1 - SQL 查询
设想一个具有 4 个同样大小列的表,以未压缩的文本文件形式存储在 Amazon S3 上,总大小为 3TB。如果运行查询以从该表的一个列中获取数据,则需要 Amazon Athena 扫描整个文件,因为文本格式无法拆分。
- 上述查询的费用为:15 USD。(所扫描的 3TB 数据的费用为:3 * 5 USD/TB = 15 USD)
如果使用 GZIP 将文件压缩,则可以得到 3:1 的压缩比。就本例而言,您可以获得一个大小为 1TB 的压缩文件。对这个文件运行同样的查询,费用为 5 USD。Athena 仍需要扫描整个文件,但是由于文件大小缩小为原来的三分之一,因此您只需支付原来费用的三分之一即可。如果您压缩文件并将其转换为列格式(如 Apache Parquet)以实现 3:1 的压缩比,则您仍可以在 Amazon S3 上获得 1TB 大小的数据。但是,就本例而言,由于 Parquet 是列式,因此 Amazon Athena 只能够读取与正在执行的查询相关的列。 由于所谈到的查询仅参考一个列,因此 Athena 只需读取该列,而不必读取另外四分之三的文件。由于 Athena 只需读取四分之一的文件,因此它只需从 S3 扫描 0.25TB 的数据。
- 上述查询的费用为:1.25 USD。压缩可以将费用降低到原来的三分之一,而只读取一列又可以将费用进一步降低到四分之一。
(文件大小 = 3TB/3 = 1TB。读取一个列时扫描的数据 = 1TB/4 = 0.25TB。0.25TB 数据的费用 = 0.25 * 5 USD/TB = 1.25 USD)
示例 2 – 带预置容量的 SQL 查询
假设您的团队支持 Web 应用程序,该应用程序向在工作时间提交查询并期望其查询在可预测时间内完成的用户提供自助分析。在上周,应用程序用户共提交了 10,000 个查询,扫描了 500TB 的数据。随着用户数量的增长,您希望使用预置容量来吸住保持一致的用户体验。通过对查询的分析,您可以确定 96 DPU 足以满足当前的工作负载。
- 在一个工作日内,使用预置容量支持此工作负载的成本计算为 96 DPU * 每 DPU 小时 0.30 美元 * 每天 12 小时 = 345.60 美元。
某天早晨,您得知一组新的应用程序用户已经完成注册,因此,您预计查询量将比前一天高出两倍。您希望确保用户的性能与昨天相似,但预计所有用户不会同时提交查询。在一天中的两小时内,您将容量增加 50%,达到 144 DPU。
- 当天工作负载的成本等于 2 小时 96 DPU 加上 10 小时 144 DPU 的成本,或 96 DPU * 每 DPU 小时 0.30 美元 * 2 小时 + 144 DPU * 每 DPU 小时 0.30 美元 * 10 小时 = 489.60 美元。
示例 3 - Apache Spark 应用程序
请想象这样一个场景:在 Amazon Athena 控制台中使用笔记本提取上一季度的销售数据,并将这些数据图表化以创建报告。您使用笔记本启动一个会话。您的会话持续了 1 个小时,会话中提交了 6 次计算。每次运行计算需要 20 个 1-DPU Worker 节点,持续时间 1 分钟。
- Worker DPU-小时 = 计算次数 * 每次计算使用的 DPU 数量 * 计算的执行时间 = 6 次计算 * 每次计算 20 个 DPU * 每次计算持续 (1/60) 小时 = 2.0 DPU-小时
- 驱动程序 DPU-小时 = 每个会话使用的 DPU 数量 * 会话时间 = 每个会话 1 DPU * 每个会话 1 小时 = 1.0 DPU-小时
- 总计 DPU-小时 = Worker DPU-小时 + 驱动程序 DPU-小时 = 2.0 DPU-小时 + 1.0 DPU-小时 = 3.0 DPU-小时
- Spark 应用程序费用 = 每 DPU-小时 0.35 USD * 3.0 DPU-小时 = 1.05 USD
请注意:S3 会单独向您收费才能存储和读取您的数据,以及您的执行结果。