Amazon Athena 是一种交互式查询服务,让您能够使用标准 SQL 直接在 Amazon Simple Storage Service (Amazon S3) 中轻松分析数据。只需在 AWS 管理控制台中执行几项操作,即可将 Athena 指向 Amazon S3 中存储的数据,并开始使用标准 SQL 运行临时查询,然后在几秒钟内获得结果。
Athena 是无服务器的,因此您无需设置或管理任何基础设施,且只需为您运行的查询付费。Athena 可自动扩展 – 并行执行查询 – 因此,即使在数据集很大、查询很复杂的情况下也能很快获得结果。
通过分区您的数据,您可以限制每个查询扫描的数据量,从而提高性能并降低成本。Athena 利用 Hive 来对数据进行分区。您可按任何键对数据进行分区。一种常见的做法是根据时间对数据进行分区,通常会导致多级别分区方案。例如,每个小时都有数据传入的客户可能决定按年、月、日期和小时进行分区。另一位客户的数据来自许多不同的来源,但每天加载一次,则可以按数据源标识符和日期进行分区。
如果您针对包含大量对象且数据未分区的 Amazon S3 存储桶发出查询,则此类查询可能影响 Amazon S3 中的 Get 请求速率限制并导致 Amazon S3 异常。为防止错误发生,请将数据分区。另外,考虑调整 Amazon S3 的请求速率。
数据已分区,并以 hive 格式存储在 S3 上
存储分区数据
分区存储在 Amazon S3 中的独立文件夹内。例如,下面是示例广告展示的部分列表:
aws s3 ls s3://elasticmapreduce/samples/hive-ads/tables/impressions/
PRE dt=2009-04-12-13-00/
PRE dt=2009-04-12-13-05/
PRE dt=2009-04-12-13-10/
PRE dt=2009-04-12-13-15/
PRE dt=2009-04-12-13-20/
PRE dt=2009-04-12-14-00/
PRE dt=2009-04-12-14-05/
PRE dt=2009-04-12-14-10/
PRE dt=2009-04-12-14-15/
PRE dt=2009-04-12-14-20/
PRE dt=2009-04-12-15-00/
PRE dt=2009-04-12-15-05/
日志存储在这里,列名称 (DT) 设置为等于日期、小时和分钟增量。当您向 DDL 提供父文件夹的位置、架构和分区列的名称时,Athena 可以查询这些子文件夹中的数据。
使用工作组控制查询访问和成本
可使用工作组分隔用户、团队、应用程序或工作负载,对每个查询或整个工作组可处理的数据量设置限制,以及跟踪成本。由于工作组可作为资源,因此您可以使用基于资源级身份的策略来控制对特定工作组的访问。您还可以在 Amazon CloudWatch 中查看与查询有关的指标,通过对扫描的数据量配置限制来控制成本,创建阈值,并且在达到这些阈值时触发操作,如 Amazon SNS。
工作组与 IAM、CloudWatch 和 Amazon Simple Notification Service 集成,如下所示:
-
具有资源级权限的基于 IAM 身份的策略控制谁可以在工作组中运行查询。
-
如果您启用查询指标,Athena 会将工作组查询指标发送到 CloudWatch。
-
在 Amazon SNS 中,您可以创建 Amazon SNS 主题,用于在工作组中查询的数据使用控制超过您建立的阈值时向指定工作组用户发出警报。