AWS Athena

2025年03月17日 | 阅读 9 分钟

数据分析是一个非常复杂的过程,人们一直在努力使其变得容易。有许多分析工具,甚至连流行的科技巨头亚马逊也提供名为Amazon Athena的AWS服务。本Amazon Athena教程将指导您完成Amazon Athena的基本和高级用法。

Amazon Athena是一个交互式数据分析工具,用于在相对较短的时间内处理复杂查询。它是无服务器的。因此,无需进行设置,也无需进行基础设施管理。它不是数据库服务。因此,您只需为运行的查询付费。只需将数据指向S3,定义所需的架构,然后就可以使用标准SQL开始工作。通过AWS培训了解有关Amazon Web Services的所有信息。

Amazon Athena简介

2016年11月20日,亚马逊将其Athena作为一项服务推出。如前所述,Amazon Athena是一项无服务器查询服务,它使用存储在Amazon S3中的标准SQL来分析数据。通过在AWS管理控制台中进行几次点击,客户就可以将Amazon Athena指向存储在Amazon S3中的数据,并使用标准SQL运行查询以在几秒钟内检索结果。

使用Amazon Athena,无需设置或管理任何基础设施,客户只需为运行的查询付费。Amazon Athena会自动扩展,并行执行查询,即使面对大型数据集和复杂查询也能提供快速结果。

Microsoft SQL Server与Amazon Athena的区别

特点Microsoft SQL ServerAmazon Athena
定义Microsoft SQL Server是一个数据库管理和分析系统。Amazon Athena是一项交互式查询服务,可轻松进行数据分析。
USAGE用于数据库上的DML,DCL,DDL和TCL操作。用于数据库上的DML操作。
好处
  1. 可靠且易于使用。
  2. 高性能。
  3. 易于维护。
  4. 轻松安装服务器。
  5. 可以集成多个工具。
  1. 易于使用。
  2. 高性能。
  3. 无需维护。
  4. 无需服务器配置。
  5. 可以集成多个工具。
集成
  1. Sequlize
  2. SQLDep
  3. Presto
  1. Amazon S3
  2. AWS Glue
  3. Presto
局限性
  1. 有限的RDS存储。
  2. 有限的实例。
  3. 无法处理递归。
  1. 不支持DDL。
  2. 仅适用于外部表。
  3. 不支持定义的自定义函数。

在Athena中创建表

我们使用实时资源,因此您只需为运行的查询付费,而不用为使用的数据集付费。如果您想将数据文件上传到Amazon S3,则需要付费。

要查询S3文件数据,您必须有一个与文件结构关联的外部表。我们可以通过两种方式创建外部表

  • 手动。
  • 使用AWS Glue Crawler。

要手动创建外部表,请遵循正确的CREATE DETAILS CREATE EXTERNAL TABLE结构,并指定正确的格式和确切位置。下面提供了一个示例

手动创建外部表

创建的外部表存储在AWS Glue Catalog中。Glue Crawler会解析输入文件结构,并创建在Glue Data Catalog中定义的元数据表。

Crawler使用AWS IAM(身份和访问管理)角色来允许存档数据和数据目录。您必须具有将角色传递给Crawler以访问被爬取的Amazon S3路径的权限。

转到AWS Glue,选择**"添加表"**,然后选择**"使用Crawler添加表"**选项。

使用Glue Crawler添加表。

为Crawler命名。例如,让我们称之为car-crawler

输入Crawler名称

选择文件所在的**Amazon S3**路径。

如果您打算只查询一个文件,则可以选择S3文件路径或S3文件夹路径来查询具有相同结构的所有文件。

输入Crawler名称

选择文件所在的**Amazon S3**路径。

如果您打算只查询一个文件,则可以选择S3文件路径或S3文件夹路径来查询具有相同结构的所有文件。

作为路径。

创建一个具有S3对象权限的IAM角色(您希望查询的目标),或选择一个现有的IAM角色(该角色具有访问S3对象的足够权限)。

选择一个包含外部表的数据库,并可选地选择一个将添加到外部表名称中的前缀。

为外部表选择数据库和前缀

点击"完成"以创建Glue Crawler

  • 运行Crawler

外部表已在指定的数据库下创建。现在您可以使用此表查询S3对象。

  • 从外部表选择数据

由于我们放置了一个文件,因此查询"select * from json_files"会返回文件中的一条记录。让我们尝试将具有相同结构但另一个文件放入同一个S3文件夹,然后再次查询外部表。

如果查询同一个EXTERNAL表,您将看到返回了两行而不是一行。

当查询同一个外部表时,您将获得两条记录。这是因为S3文件夹中有两个具有所需结构的文件。您可以对数据执行许多操作。例如,以下查询将展开结果集中的数组。

访问Amazon Athena

Athena非常容易访问,并且可以通过以下方式之一进行访问

这些是访问Amazon Athena的一些方法。现在,您对Amazon Athena有了一切重要的了解,让我告诉您Athena的不同功能。

Athena的功能

在亚马逊提供的众多服务中,Athena是其中之一。它具有许多使其适合数据分析的功能。让我们逐一查看不同的功能。

  1. **易于实现:** Athena无需安装,也可以直接从AWS控制台通过AWS CLI访问。
  2. **无服务器:** 它是无服务器的,因此最终用户无需担心基础设施、配置、扩展或故障。Athena自己处理所有事情。
  3. **按查询付费:** Athena仅向您收取运行的查询费用,即每次查询处理的数据量。如果您可以压缩数据并相应地格式化数据集,则可以节省大量成本。
  4. **快速:** Athena是一个非常快速的分析工具。通过将复杂查询分解为更简单的查询并并行运行,然后合并结果以给出所需输出,它可以快速执行复杂查询。
  5. **安全:** 借助IAM策略和AWS身份,Athena使您能够完全控制数据集。由于数据存储在S3存储桶中,IAM策略可以帮助您管理用户控制。
  6. **高可用性:** 在AWS的保证下,Athena具有高可用性,用户可以全天候执行查询。正如AWS的可用性为99.999%一样,Athena也是如此。
  7. **集成:** Athena的最佳功能是它可以与AWS Glue集成。AWS Glue将帮助用户构建更好的集成数据存储库。它帮助您创建更好的数据版本、更好的表、视图等。

到目前为止,您应该对AWS Athena印象深刻。现在您已经对Athena有了很多了解。让我们动手通过一个小演示来理解Athena的工作。

演示(Amazon Athena与MySQL的比较)

在本Amazon Athena教程中,我们将比较MySQL和Athena,并了解即使简单的查询在Athena中执行所需的时间也更少。

  1. 将CSV文件加载到MySQL花费了大约1小时,但在Athena中,上传CSV文件到S3仅花费了3分钟,创建表花费了0.42秒。
    AWS Athena
  2. Select查询。Select * from table。
    AWS Athena
  3. Athena中的Select查询。
    AWS Athena
  4. MySQL中的Select查询。
  5. 从表中选择特定列。
    AWS Athena
    Athena中选择特定列
    AWS Athena
  6. MySQL中选择特定列。
  7. 获取特定列的计数。
    AWS Athena
  8. Athena中特定列的计数。
    AWS Athena
  9. 计算表中的记录数。
    AWS Athena
    Athena中计算所有记录
    AWS Athena
    带指定范围的Select查询。
    AWS Athena
    Athena中带指定范围的Select查询。
    AWS Athena

MySQL中带指定范围的Select查询。

Amazon Athena有什么局限性?

  • 优化仅限于查询。例如,存储在S3中的数据无法进行优化。
  • 没有索引选项。索引选项通常出现在传统数据库中。没有索引,Athena的操作负载会增加,可能影响性能。
  • 高效查询需要分区。为了实现高效查询,必须先对数据进行分区,然后根据性能需求进行分区管理。
  • 不支持存储过程、参数化查询和Presto联合连接器。需要Amazon Athena Federated Query来连接数据源。
  • 查询具有数千个分区的表时,Athena可能会超时。
  • 以_或.开头的源文件被视为隐藏文件。
  • 行和列大小不能超过32兆字节。
  • Athena不支持查询S3 Glacier和S3 Glacier Deep Archive存储类别中的数据。
  • 不支持CREATE TABLE LIKE、DESCRIBE INPUT和DESCRIBE OUTPUT、EXECUTE ? USING、MERGE和UPDATE等语句。

AWS Athena与AWS Glue

自2017年8月首次发布以来,AWS Glue一直作为一个完全托管的提取、转换和加载(ETL)服务运行。它包含三个主要组件

  1. 用于处理作业监控的灵活调度程序
  2. 能够生成Scala或Python代码的ETL引擎
  3. 作为中央元数据存储库的数据目录

AWS Glue可帮助您查找和转换数据集,并为这些工具的发现和查询做好准备。

因此,您应该能够将AWS Athena与AWS Glue一起使用。后续的数据目录将创建、存储和检索Athena查询的表元数据(或架构)。

使用AWS Athena的优点和缺点是什么?

事实证明,AWS Athena是一把双刃剑。使其便宜且易于访问的功能可能在一定程度上限制您。

AWS Athena的优点

  • **无服务器:** 由于它是一个完全托管的无服务器服务,AWS Athena为您节省了管理基础设施的所有麻烦。您无需担心设置集群、调节容量或加载数据。
  • **经济高效:** 与其最接近的竞争对手相比,AWS Athena不仅经济高效,而且相当实惠。这是因为该服务不向您收取实例数量的费用。相反,您只需为运行的查询付费。
  • **广泛的可访问性:** 作为一个使用标准SQL运行查询的服务,AWS Athena对每个人都非常容易访问 - 不仅仅是开发人员和工程师。它可以被业务分析师和其他数据专业人士采用,因为标准SQL查询非常简单明了。
  • **灵活性:** Amazon Athena开放且通用的架构不会将您限制在任何特定的供应商、技术或设备上。例如,您可以处理各种开源文件格式,并在不调整架构的情况下自由切换查询引擎。

AWS Athena的缺点

  • **无数据优化:** AWS Athena不提供很多自定义功能。您能做的最多是优化查询 - 而不是底层数据。即使您尝试使用AWS Glue替换Amazon S3数据,您仍然需要小心,以免损害访问相同数据的其他服务。
  • **共享资源:** 根据Amazon的服务水平协议(SLA),所有全球AWS Athena用户在运行查询时共享同一资源。这种多租户方法有时会引起资源压力,导致查询性能波动。
  • **数据操作操作的减少:** AWS Athena只是一个查询服务,这里只有一个查询引擎。它不附带用于插入、删除和更新数据的内置数据操作语言**(DML)**接口。
  • **需要数据分区:** 如果您打算高效地运行SQL查询,则可能需要对存储在Amazon S3中的数据集进行分区。您需要创建的分区的数量将极大地影响查询的速度和性能。例如,每扫描500个分区将使您的查询时间增加一秒。
  • **缺乏索引:** 虽然索引一直是传统数据库的内置功能,但您在AWS Athena中没有此特权。因此,在合并大型表等操作中应该会遇到挑战。

AWS Athena是如何定价的?

正如我们已经说过的,**AWS** Athena遵循一种定价计划,根据您选择在数据分析中运行的查询来收费。

Amazon会计算字节数,然后将其四舍五入到最接近的兆字节,每次查询最少10MB。

对于您能负担得起的每太字节**(TB)**数据,您应该期望支付5美元。同时,失败的查询、用于管理分区的语句以及**数据定义语言(DDL)**语句将不会向您收费。

但这还不是全部。Amazon还使您能够将每查询成本降低**30%**至**90%**。您只需**拆分、压缩**或**转换**数据为列格式。