AWS Athena - 快速指南

AWS Athena 是一种无服务器交互式查询服务,允许您使用标准 SQL 直接在 Amazon Simple Storge Service (S3) 中分析大型数据集。

  • Athena 比传统数据库更好,因为它消除了配置、管理和扩展等管理任务的需要。
  • Athena 为用户提供了更大的灵活性,因为它可以自动处理跨分区的数据。将数据上传到 Amazon S3 后,您可以立即开始查询数据。
  • Athena 即使在大型数据集中也能实现高性能查询,因为它使用 Presto 分布式 SQL 引擎来运行查询。
  • AWS Athena 支持各种格式,包括 CSV、JSON、Parquet 和 ORC。

数据分析师、开发人员或任何想要在不需要数据仓库的情况下运行查询的人都可以使用 Athena。

为什么选择 AWS Athena 进行数据查询?

在本节中,我们重点介绍了一系列坚实的理由,说明为什么您应该选择 AWS Athena 而不是其他数据查询方案 −

1. 无服务器架构

AWS Athena 最重要的优势之一是它完全无服务器。这意味着用户不需要管理服务器、存储,也不必担心扩展基础设施。 Athena 仅允许用户进行数据查询。

2. 按查询付费模式

AWS Athena 遵循按查询付费模式。这意味着用户只需为您的查询扫描的数据付费。此功能使其具有成本效益。

3. 支持各种数据格式

Athena 支持各种数据格式,包括结构化、半结构化和非结构化格式。它可以查询存储为 CSV、JSON、Apache Parquet、Apache ORC 甚至 Apache Web Logs 等日志格式的数据。

4.轻松与 AWS 服务集成

AWS Athena 可以轻松与其他 AWS 工具连接,从而轻松创建完整的数据管道。

例如,AWS Athena 可以与 AWS Glue 配合使用以进行数据组织,与 AWS Lambda 配合使用以进行实时处理,与 Amazon QuickSight 配合使用以可视化数据和构建仪表板。

5. Athena 提供安全的环境

AWS Athena 是安全的,因为它为您的数据提供了多层安全性。它与 AWS Identity and Access Management (IAM) 集成以控制对数据集的访问。

Athena 确保只有授权用户才能运行查询。用户还可以配置 VPC 端点,以确保所有数据查询都在安全的私有网络中运行。

6. 可扩展性和速度

AWS Athena 旨在处理大量数据。它会自动扩展自身以适应更大的数据集,并确保无论数据量如何都能快速执行查询。

Athena 即使对于复杂查询也能实现高速性能,因为它使用 Presto 分布式 SQL 引擎来运行查询。

7. 易于使用

AWS Athena 使用标准 SQL,因此对于熟悉 SQL 查询的任何人来说都很容易使用它。其用户友好的界面使用户只需单击几下即可直接在其 S3 数据上运行 SQL 查询。

Athena 还通过自动从数据中创建表和模式来简化设置和运行查询的过程。

AWS Athena - 入门

设置 AWS Athena 环境非常简单,而且对于高效地对存储在 Amazon S3 中的数据运行 SQL 查询非常重要。

先决条件

以下是开始使用 AWS Athena 之前的先决条件 −

  • 您必须拥有 AWS 账户 才能使用 AWS Athena
  • 您应该拥有 IAM 角色,它允许 AWS Athena 从 Amazon S3 访问您的数据。
  • 您应该将 数据存储在 Amazon S3 中。

满足这些先决条件后,请按照以下步骤设置 AWS Athena 环境 −

步骤 1:登录 AWS控制台

首先,您需要登录到您的 AWS 管理控制台。然后导航到 Amazon Athena 服务。您也可以在搜索栏中搜索 Athena。

步骤 2:创建 S3 存储桶

在运行查询之前,必须将您的数据存储在 Amazon S3 中。这是因为 AWS Athena 直接从 S3 查询数据。

如果您尚未创建存储桶,请先转到 S3 服务并单击"创建存储桶"按钮来创建它。

步骤 3:配置 AWS Glue 数据目录

AWS Athena 需要数据目录来定义数据集的结构。为此,建议配置 AWS Glue 数据目录。

AWS Glue 可以自动与 Athena 集成并帮助您将数据组织到表中。在 AWS Glue 中,您需要创建一个爬虫,用于扫描您的 S3 数据并在 Athena 数据目录中创建表架构。

步骤 4:设置 IAM 权限

Aws Athena 需要权限才能访问 S3 和其他 AWS 服务。您需要创建或分配一个具有必要权限的 IAM 角色,以便 Athena 访问您的 S3 存储桶和 Glue 数据目录。

在 AWS Athena 中创建您的第一个查询

现在,当您设置 AWS Athena 环境时,您就可以在 Athena 中创建您的第一个查询了。在 AWS Athena 中创建查询是一个非常简单的过程。它允许您轻松分析数据。

按照以下步骤在 Athena − 中创建您的第一个查询

步骤 1:打开 Athena 控制台

首先,登录您的 AWS 管理控制台并导航到 Athena 服务。

步骤 2:选择您的数据库

接下来,打开 Athena 查询编辑器。现在选择存储数据的数据库。此数据库应包含您的表。

查看下图,其中我们选择了名为 "tutorialpoint" 的数据库 −

选择您的数据库

步骤 3:编写 SQL 查询

现在,您可以开始编写 SQL 查询。使用您在所选数据库中创建并保存的表。

步骤 4:运行查询

编写查询后,要运行它,请单击"运行查询"按钮。AWS Athena 将执行您的 SQL 语句并从指定的表中检索数据。

步骤 5:查看结果

查询完成执行后,它将在查询编辑器下方显示结果。您还可以以 CSV 等各种格式下载结果。

步骤 6:保存查询

您还可以保存查询并在将来再次使用该查询。

按照上述步骤,您可以轻松地在 AWS Athena 中创建和运行您的第一个查询。

AWS Athena 如何工作?

以下流程图解释了 Amazon Athena 的工作原理 −

AWS Athena 如何工作?

首先,您需要注册并选择数据源。例如,Amazon S3 是一种流行的 AWS 数据源,您可以在其中存储表。

接下来,此数据源应集成到 Amazon Athena。您首先需要配置 Athena。

配置和集成后,您可以使用 Athena 的查询编辑器编写和运行 SQL 语句来查询您的数据源。

Athena 将在几秒钟内提供您的查询结果。获得结果后立即进行分析。您可以根据需要优化查询。

与 AWS S3 和其他 AWS 服务集成

将 AWS Athena 与 AWS S3 和其他 AWS 服务集成可增强数据分析的功能并简化数据管道。

接下来在本章中,我们提供了将 Athena 与 AWS S3 和其他 AWS 服务集成的分步指南。

将 AWS Athena 与 Amazon S3 集成

要将 AWS Athena 与 Amazon S3 集成,请按照以下步骤操作 −

上传数据

首先,将数据集存储在 Amazon S3 中。 Athena 可以直接从各种格式(如 CSV、JSON、Parquet、ORC 和 Avro)进行查询。

文件夹结构

接下来,您需要使用文件夹结构(如 s3://your-bucket/folder/subfolder/data.csv)来组织数据。它使查询更简单。

在 S3 中创建表并运行查询

现在,您可以创建表并对保存在 Amazon S3 中的数据运行查询。

将 AWS Athena 与 AWS Glue 集成

要将 AWS Athena 与 AWS Glue 集成,请按照以下步骤操作 −

设置 Glue 数据目录

首先,设置 AWS Glue 数据目录。它可以自动发现和分类 Amazon S3 中的数据。Glue 目录充当 Aws Athena 的集中元数据存储库。

配置爬虫程序

接下来,我们需要配置 Glue 爬虫程序。为此,首先,创建 Glue 爬虫程序并指定您的 Amazon S3 存储桶位置。Glue 爬虫程序会扫描数据并创建元数据表。

使用 Athena 查询数据

一旦 Glue 对您的数据进行了分类,表格将自动出现在 AWS Athena 查询编辑器中。现在,您只需选择表格即可查询数据。例如,一个简单的查询可以如下 −

SELECT * FROM glu​​e_catalog_database.table_name WHERE condition;

转换数据

AWS Glue 可用于 ETL 任务。您可以编写 Glue 作业来处理 Amazon S3 中的原始数据,并将清理后的数据存储回 Amazon S3。

将 AWS Athena 与 AWS Lambda 集成

要将 AWS Athena 与 AWS Lambda 集成,请按照以下步骤 −

创建 Lambda 函数

首先,编写一个使用 AWS SDK 触发 AWS Athena 查询的 Lambda 函数。例如,S3 事件(如新文件上传)。

示例

查看以下示例 −

import boto3
athena_client = boto3.client('athena')

def lambda_handler(event, context):
response = athena_client.start_query_execution(
   QueryString='SELECT * FROM your_table LIMIT 10;',
   QueryExecutionContext={
      'Database': 'your_database'
   },
   ResultConfiguration={
      'OutputLocation': 's3://your-output-bucket/'
   }
)
return response

自动化事件驱动查询

您还可以配置 Lambda 函数以根据事件运行 Aws Athena 查询。例如,事件可以是上传到 S3 的新数据。此集成允许用户进行实时或计划的数据处理。

将 AWS Athena 与 Amazon CloudWatch 集成

要将 AWS Athena 与 Amazon CloudWatch 集成,请按照以下步骤操作 −

设置 CloudWatch 日志

首先,您需要设置 CloudWatch 日志。为此,请转到 Athena 设置并启用 CloudWatch 日志以监控查询执行。

跟踪查询性能

启用后,CloudWatch 允许您监控查询性能、执行时间和故障。它可以帮助您随着时间的推移优化成本和性能。

设置查询失败警报

最后,您可以设置 CloudWatch 警报,当 Athena 查询失败或执行时间超过特定阈值时通知您。创建警报可确保可靠的数据处理。

AWS Athena - 编写 SQL 查询

在 AWS Athena 中运行任何查询之前,您需要创建一个引用 Amazon S3 中数据的表。 Athena 使用读取时模式方法,这意味着您在查询数据时定义数据的结构,而不是在存储数据时定义数据的结构。

让我们了解在 Athena 中创建表的步骤 −

登录 AWS Athena 控制台

首先,从 AWS 管理控制台访问 Athena。

定义表模式

编写定义表结构的 SQL 查询。例如 −

CREATE EXTERNAL TABLE IF NOT EXISTS your_table_name (
   column1 STRING,
   column2 INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 's3://your-bucket/folder/';

执行查询

现在,在 Athena 查询编辑器中运行此查询以创建表。这将允许您引用指定 S3 存储桶中的数据。

在 Athena 中运行基本 SQL 查询

创建表后,您可以开始运行 SQL 查询来分析数据。Athena 支持标准 SQL,这使得熟悉 SQL 的用户可以轻松编写查询。下面给出了一个简单查询的示例

SELECT * FROM your_table_name LIMIT 10;

此查询将从指定的表中获取前 10 行。您还可以过滤数据、连接多个表并使用聚合函数,就像在任何基于 SQL 的数据库中一样。

示例

让我们借助示例来理解它。在这里,我们创建了一个数据库、一个表,然后在 Athena 查询编辑器中对该表运行查询 −

Athena 查询编辑器

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

诸如ParquetORC之类的格式也支持数据压缩,这可以进一步提高性能。

使用压缩

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

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

AWS Athena - 数据安全

当您使用 AWS Athena 等云服务时,数据安全成为重中之重。在本章中,我们重点介绍了在 AWS Athena 中保护数据的一些关键方面 −

管理访问控制和权限

AWS Athena 与 AWS Identity and Access Management (IAM) 集成,使您能够控制谁可以访问您的数据以及他们可以执行哪些操作。

正确配置"访问控制和权限"可确保只有授权用户才能查询或管理 Athena 中的数据。

使用 AWS IAM 进行访问控制

IAM 是管理对 AWS 资源的访问的主要工具之一。使用 IAM,您可以创建用户帐户、分配角色并根据工作职能定义权限。

让我们看看如何使用 IAM 管理"访问控制"−

创建 IAM 角色和用户

AWS Athena 允许您为具有特定权限的不同用户创建 IAM 角色。例如,数据分析师只需要访问查询数据,而数据工程师则需要完全访问权限才能创建和修改表。

使用细粒度权限

在 AWS Athena 中,您还可以设置细粒度权限来限制对特定操作的访问,例如查询数据或更改表结构。

例如,IAM 策略可以授予运行 SQL 查询的权限,但阻止用户修改表。

限制对 Amazon S3 的访问

您可以应用存储桶策略,允许特定 IAM 用户或角色仅访问某些数据集或文件夹。

数据加密

在 AWS Athena 中保护数据的另一个重要组成部分是加密。它可确保您的数据在静止和传输过程中均受到保护。

Athena 提供多种加密选项,可帮助您保护敏感数据并满足法规遵从性要求。

加密静止数据

下面给出了两种方法,借助它们您可以加密存储在 Amazon S3 中的数据 −

  • S3 托管加密 (SSE-S3)
  • AWS 密钥管理服务 (KMS)

加密传输中的数据

除了静止加密之外,AWS Athena 还可以使用安全套接字层 (SSL)加密来加密传输中的数据。

SSL 可确保 Athena 与其他服务(例如 Amazon S3)之间传输的任何数据都经过加密。

AWS Athena 中的合规性功能

为了满足合规性要求,AWS Athena 还与各种 AWS 服务集成 −

AWS CloudTrail

AWS CloudTrail 记录在 Athena 中执行的所有操作。这些日志提供了详细的审计跟踪,可帮助您跟踪用户活动并检测未经授权的访问或可疑行为。

AWS Config

AWS Config 可帮助您监控 Athena 配置中的任何更改。它确保遵守组织政策。

AWS Athena - 成本管理

AWS Athena 具有按需付费定价模式,为用户提供了极大的灵活性。在本章中,我们将简要说明 Athena 如何向您收费以及您可以遵循哪些策略来最大限度地降低 AWS Athena 中的成本。

了解 Athena 定价和查询成本

AWS Athena 根据查询扫描的数据量收费。扫描的数据越多,成本越高。您必须按每 TB 扫描数据付费。目前,费用约为每 TB 扫描数据 5 美元,但这可能因地区而异。

例如,假设您查询 500 GB 的数据集,而 Athena 需要扫描整个数据集,则费用为2.50 美元

Athena 定价如何运作?

Athena 定价主要取决于以下三个因素 −

扫描的数据

每次运行查询时,Athena 都需要从 Amazon S3 扫描相关数据。总费用将基于查询期间扫描的数据量。

未压缩的数据

未压缩的数据占用更多空间。这意味着当您对非结构化数据运行查询时,Athena 将需要扫描更多数据。这会增加成本。

结果存储在 S3 中

当您运行查询时,查询结果将保存到 S3。您需要支付标准 S3 存储费用。

最小化 AWS Athena 成本的策略

以下是您可以实施的一些策略,以最小化 AWS Athena 中的成本 −

  • 使用压缩来减小数据大小
  • 对数据进行分区
  • 仅选择所需的列
  • 优化文件大小
  • 使用缓存限制查询结果
  • 监控查询使用情况和成本

了解如何计算 Athena 成本并应用策略来最小化这些成本对于有效的成本管理是必要的。