使用 Amazon Athena 的优势
结合上述功能,以下是 Athena 优势的简明概览:
|
优势 |
功能 |
说明 |
|
成本效益 |
按查询计费 |
仅为查询所扫描的数据付费;无前期成本或复杂许可;可通过分区、数据压缩与列式格式进行成本优化。 |
|
易用性 |
无服务器与标准 SQL |
无需搭建或管理基础设施;用户可用熟悉的 SQL 语法在数分钟内开始查询数据,上手简单直观。 |
|
灵活性 |
多格式支持 |
支持多种数据格式(如 CSV、JSON、Parquet),可直接从 S3 按原生格式查询数据,无需 ETL 过程。 |
|
快速洞见 |
快速分析与直接查询 S3 |
借助无服务器架构实现即时数据分析,可直接从存储于 S3 的数据中快速提取洞见,缩短数据驱动决策的价值达成时间。 |
Amazon Athena 的常见使用场景
我们已定义了 Athena 并介绍了其功能与优势,那么它具体用于哪些场景?本节将回顾一些最常见的用例。
日志分析
Amazon Athena 常用于日志分析,尤其是对存储在 Amazon S3 的日志进行查询与分析。组织通常会从应用日志、服务器日志、访问日志等多个来源生成海量日志数据。
将这些日志存储在 S3 中并使用 Athena 查询,用户无需复杂配置即可快速识别趋势、诊断问题并监控系统性能。
- 示例: 某公司可使用 Athena 分析存储在 S3 的 Web 服务器日志,帮助识别用户行为模式、检测异常(如流量异常峰值),或实时排查错误。
临时数据探索
凭借无服务器架构与对标准 SQL 的支持,Athena 非常适合临时性的数据探索。无论您是数据科学家、分析师还是工程师,Athena 都能让您无需将数据加载进传统数据库,就能快速查询存储在 S3 的数据。
- 示例: 数据分析师可使用 Athena 探索刚导入 S3 的新数据集,运行快速查询以了解数据结构、检测异常或识别关键指标,再开展更深入的分析。
查询数据湖
随着组织越来越多地采用数据湖来存储海量原始与处理后的数据,Athena 成为了这些数据湖的强大查询引擎。它允许用户直接对存储在 S3 的数据执行分析,是现代数据湖架构中不可或缺的一环。
- 示例: 某组织可使用 Athena 查询包含客户交易数据、产品信息与销售记录的数据湖,使业务用户无需数据仓库也能生成报表与洞见。
商业智能报表
Athena 也常用于商业智能(BI)技术栈的一部分,与 Amazon QuickSight 等 BI 工具集成以实现数据可视化与报表。通过用 Athena 查询 S3 中的数据,并在 QuickSight 中可视化,组织即可创建用于决策的交互式仪表盘与报表。
- 示例: 某公司可使用 Athena 查询存储在 S3 的销售数据,并将结果连接到 QuickSight,构建跟踪月度销售表现、客户获客成本及其他关键指标的仪表盘。
Amazon Athena 与 Redshift 对比
如果您熟悉 Amazon Redshift,可能会好奇它与 Athena 的差异。
尽管 Athena 与 Redshift 都处理数据集,但目标不同。Redshift 的主要用例是数据仓库和常规的大数据分析。AWS Athena 侧重于让用户对存储在 S3 的数据进行临时(ad hoc)分析。
以下是 Athena 与 Redshift 的详细对比:
|
对比维度 |
Amazon Athena |
Amazon Redshift |
|
架构 |
无服务器查询服务;在 Amazon S3 上直接运行 SQL 查询并自动扩展;无需基础设施管理。 |
全托管数据仓库;需要具备专用基础设施的仓库集群;可按需扩展。提供 Redshift Serverless 选项。 |
|
使用场景 |
适合对 S3 数据进行临时查询与分析;在无需数据转换的情境下优先考虑灵活性与成本效益。 |
适用于复杂的大规模分析与报表;适合需要频繁查询与转换的结构化数据。 |
|
成本结构 |
按查询计费:基于查询扫描的数据量收费,对间歇或波动性工作负载更具成本效益。 |
基于集群规模与使用量定价;对可预期的大批量查询可使用预留实例定价。 |
|
性能 |
取决于数据规模与格式;可通过分区与压缩优化;更适合较小或不太复杂的查询。 |
面向复杂查询的高性能;使用列式存储、并行处理与高级优化应对密集型工作负载。 |
|
数据集成 |
无需转换或加载即可直接查询 S3 中的数据;支持多种格式与可扩展连接器(包括 Redshift)。 |
需要将数据加载进仓库,能与 AWS 服务集成并支持多种数据摄取方式,但仅读取其内部存储的数据。 |
设置 AWS Athena
现在动手实践,设置 Athena 并运行一些查询!
1. 创建 AWS 账户
使用 AWS Athena 需要一个 AWS 账户。如果您还没有,需要先创建。请按照此AWS 设置指南中的步骤操作。
尽管 AWS Athena 没有免费套餐,但您应能运行 2-3 个小型测试查询(约 10MB)来了解系统工作方式。请按门户指引完成身份验证,然后登录您的 AWS 账户。
2. 设置权限
与所有 Amazon AWS 产品一样,Athena 通过 IAM(身份与访问管理)策略来控制权限。您是账户的根用户,应具备在自己 S3 桶上运行 Athena 查询所需的权限。
您可在 AWS 首页仪表盘顶部搜索栏中搜索 IAM 服务来管理权限,并参考这份完整的 IAM 指南。AWS 文档也提供了关于 Athena 特定设置的更多信息。

3. 配置 Athena 访问 Amazon S3 中的数据
在运行查询之前,我们需要先创建一个 S3 桶来存放数据。
Amazon S3 即 Simple Storage Service(简单存储服务),是 AWS 在云环境中管理存储与数据的关键组件。按照这篇关于创建 Amazon S3 桶的优秀指南,我们可以为数据与查询创建存储环境。
简而言之,您可以在搜索栏中查找 S3 服务以进入 S3 首页:

您会在首页右侧边栏看到“Create Bucket(创建桶)”按钮。按照页面指引创建一个桶,以便 Athena 服务用于保存查询结果。

我将使用所有其他默认选项创建名为“athenadatacampguide”的桶。由于桶名需在整个 AWS 中全局唯一,您需要为本教程选择另一个名称。

现在,我们需要将此桶连接到 Athena。我将进入 Athena 控制台,并点击顶部附近的小通知栏中的“Edit Settings(编辑设置)”。

随后我会选择刚创建的桶。要查找您的桶,可使用右侧的“Browse S3(浏览 S3)”按钮,或输入以“s3://”为前缀的桶名称。
选择好桶后,点击“Save(保存)”,再通过顶部工具栏点击“Editor(编辑器)”返回查询编辑器。

4. 创建数据库
AWS Athena 以分层结构组织数据。它使用“数据目录”,即一组数据库,也称为 schema(架构)。
我们实际查询的表位于数据库之中。要创建新的数据目录,您可以使用 Amazon Lambda 并连接到外部数据源。随后可将数据目录保存为 Lambda、Hive 或 Glue 的数据目录。
AWS 的默认做法是使用 Glue 服务作为中心数据目录存储库。我们将专注于构建一个用于存放可供查询的表的数据库。
在编辑器中,前往 Query Editor(查询编辑器)面板。我们将在这里编写创建数据库、查询表与运行分析的语句。

要创建第一个数据库,我们将运行以下查询:
CREATE DATABASE mydatabase
运行该查询后,您即可在左侧边栏“Database(数据库)”下方的下拉菜单中进行选择。
现在我们已有数据库,接下来创建一张表,便于进行查询!

将数据导入数据库的方式会因您的 AWS 设置而略有不同。您可以利用如 Redshift 等数据仓库中存储的数据,或使用 AWS Kinesis 与 Lambda 的流数据来生成表格数据。
今天,我们将使用 AWS Cloudfront 日志样本数据。由于数据较为复杂,创建过程的一部分会使用正则表达式分组将 URL 数据解析为列。
使用以下 SQL,我们可以创建一张表。 注意: 请将下方的“myregion”替换为您的 AWS 区域。
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
Date DATE,
Time STRING,
Location STRING,
Bytes INT,
RequestIP STRING,
Method STRING,
Host STRING,
Uri STRING,
Status INT,
Referrer STRING,
os STRING,
Browser STRING,
BrowserVersion STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)
如果表已出现在左侧边栏,您就可以开始查询了!

在 AWS Athena 中编写并运行查询
在 Athena 中编写查询与在传统 SQL 中类似。您只需编写并提交查询,Athena 即会返回所需结果。
一个最佳实践是以如下语法编写 FROM 子句:“DataSource”。“database”。“table”。这样就不会混淆数据来源。
我们先尝试一条简单的 SELECT 语句。
SELECT *
FROM "AwsDataCatalog"."mydatabase"."cloudfront_logs"
LIMIT 10
这应返回包含 10 条结果的表。Athena 允许您复制或下载结果,同时这些结果也会保存到您连接至 Athena 的 S3 桶中。

我们还可以编写简单的 GROUP BY 查询。下面这条语句可让我们了解与特定 HTTP 方法相关的 requestip(不一定唯一)的数量。
SELECT
method,
COUNT(requestip)
FROM "AwsDataCatalog"."mydatabase"."cloudfront_logs"
GROUP BY 1
充分利用 Athena 的一种好办法是编写窗口函数等更复杂的查询。得益于 Athena 的优化,我们可以更快地完成复杂计算。
例如,我们可以使用 Athena 为每条记录按区域与日期分区,并按时间降序生成 ROW NUMBER()。然后通过 WHERE 过滤取第一行,即可为每个区域与日期选取最新记录。
SELECT *
FROM (
SELECT
location,
date,
time,
ROW_NUMBER() OVER(PARTITION BY location, date ORDER BY time DESC) row_num
FROM "AwsDataCatalog"."mydatabase"."cloudfront_logs"
)
WHERE row_num = 1
这只是使用 Athena 的起点。您可以继续编写任何能够发挥 Athena 能力的查询。
使用 AWS Athena 的最佳实践
与其他数据处理工具一样,AWS Athena 也有一系列最佳实践。这些做法不仅能让您的工作更轻松,还能提升其性能。
此外,由于 AWS 是基于云的服务,用户会因多种存储与计算因素而产生费用,这些实践还能带来可观的成本节省!
优化数据格式(如 Parquet、ORC)
在 AWS Athena 中,有些数据格式更易于使用。由于 Athena 从 S3 桶中读取数据,选择易读取且压缩过的格式将提升性能并降低成本。
以 CSV 存储的原始数据虽最简单,但效率较低。将数据以 Parquet 或 ORC 等压缩格式存储可节省数据读取成本。
Parquet 与 ORC 的另一优点是其基于列的压缩。Athena 的优化器可以仅针对特定列进行读取,而无需遍历整张表来进行计算。
通过分区提升查询性能
数据分区是指按某个键(如日期)定期拆分数据集。例如,我们可以按天进行分区,使数据自动按日划分并存储。
数据分区后,SQL 引擎可通过仅查看相关分区来进行更好的优化,从而直接减少扫描数据量并降低总体成本。
通过优化查询来管理成本
在进行数据分析时,适当的复杂度在所难免,但优化查询有助于减少计算时间与成本。有些成本并非直接来自 Athena,而是源自 Athena 使用的其他服务。
Athena 成本的主要组成是数据扫描与处理,但若您保存了庞大的结果集,亦可能产生 S3 成本。我们也可通过遵循常见 SQL 最佳实践来优化查询,从而提升性能并降低成本。
例如,以下做法都有助于优化:
- 尽可能进行数据过滤,减少处理的数据集大小
- 谨慎进行关联,尽量减少不必要的计算
- 尽量避免使用
SELECT * - 测试查询时使用
LIMIT
这些最佳实践将提升查询性能并降低成本!
监控与排查查询
AWS Athena 可连接 Amazon CloudWatch 存储查询指标。通过查看查询性能日志,我们可以发现低效查询或问题所在。
将 AWS Athena 与其他 AWS 服务集成
如前所述,AWS Athena 可与多项 AWS 服务集成,从而增强其在数据编目、可视化、处理与仓储方面的能力。
下面介绍 Athena 与 AWS Glue、Amazon QuickSight、AWS Lambda 与 Amazon Redshift 等服务的协作方式。
使用 AWS Glue 进行数据编目与 ETL
当与 AWS Athena 集成时,AWS Glue 作为中心元数据存储库,可自动编目 Amazon S3 中的数据。这种集成免去了手动定义模式的工作,简化了在 Athena 中的数据查询。
Glue 还提供 ETL 能力,通过自动化数据压缩、分区与格式转换等任务来转换并准备数据,使其在 Athena 中实现高效查询,确保处理高效有效。
使用 Amazon QuickSight 进行数据可视化
Amazon QuickSight 可与 AWS Athena 集成,将查询结果转化为交互式仪表盘与报表。该连接允许您直接基于 Athena 查询进行可视化,快速便捷地创建可视化洞见。
QuickSight 支持自动数据刷新与高级分析等功能,是探索与呈现数据的强大工具。
借助 AWS Lambda 的无服务器数据处理
AWS Lambda 可在无服务器环境中将 Athena 纳入自动化数据处理流程。Lambda 函数可在事件触发(如 S3 中有新数据)时运行 Athena 查询,实现近实时处理。
Lambda 还可基于查询结果自动执行后续操作,构建无需人工干预的可扩展事件驱动工作流。
结合 Amazon Redshift 的数据仓库
Athena 适用于对 S3 数据进行临时查询,而 Amazon Redshift 则提供稳健、结构化、可支持复杂分析的解决方案。您可以用 Athena 对原始数据进行快速分析,再用 Redshift 处理更为密集的高性能查询。
二者的集成允许在 S3 与 Redshift 之间进行数据流转,结合两种服务的优势,构建全面的分析方案。
结语
AWS Athena 是深度融入 AWS 生态的强大查询引擎。通过让用户快速访问 S3 桶中的数据,并将查询结果保存回 S3,AWS Athena 赋能用户以更灵活的方式深入探索数据。它还受益于其他 AWS 服务的优势,如无服务器、可扩展与易用性。
如果您想进一步学习 AWS,DataCamp 提供了多种资源:
常见问题解答
AWS Athena 能否用于查询存储在 Amazon S3 之外的数据?
虽然 AWS Athena 主要用于查询存储在 Amazon S3 中的数据,但可通过 AWS Athena Federated Query 扩展至其他来源。借助数据源连接器,该功能允许您跨多个数据存储查询数据,例如关系型数据库、本地数据源及其他云服务。
Athena 如何处理数据随时间变化的模式?
AWS Athena 通过 AWS Glue Data Catalog 处理模式变更,该目录支持模式版本控制与演进。这使您能够随时间管理和跟踪数据模式的变化,确保即使数据结构演变,查询也能保持一致与准确。
Athena 是否对单次请求可查询的数据量有限制?
Athena 不对可查询的数据规模施加硬性上限。然而,查询性能可能随数据规模与复杂度而变化。采用分区与压缩等最佳实践有助于优化对大型数据集的查询性能。
AWS Athena 与 Google BigQuery 有何比较?
AWS Athena 与 Google BigQuery 都是面向大规模数据分析的无服务器查询引擎。尽管二者有相似之处,但在定价模型、与其他云服务的集成以及对不同数据格式的原生支持上存在差异。BigQuery 通常采用定额或按需定价,而 Athena 采用按查询计费。此外,根据您现有的云基础设施与需求,集成便利性与易用性也可能不同。
我可以在 AWS Athena 中安排查询自动运行吗?
您可以使用 AWS Lambda 与 Amazon CloudWatch Events 在 AWS Athena 中安排查询自动运行。通过在 CloudWatch 中创建计划事件,可触发 Lambda 函数在设定的时间间隔内运行特定 Athena 查询,从而实现数据分析任务的自动化与周期性执行。

我是一名数据科学家,擅长空间分析、机器学习和数据管道。曾使用过 GCP、Hadoop、Hive、Snowflake、Airflow 等数据科学/工程相关流程与工具。
AWS Athena 是一项功能强大的无服务器查询服务,您无需复杂的 ETL 流程或基础设施管理,即可使用标准 SQL 直接分析 Amazon S3 中的数据。
在本文中,我们将探讨 Athena 的独特之处,与 Amazon Redshift 进行对比,概述其关键功能与优势,并带您一步步完成数据查询的设置!
什么是 AWS Athena?
AWS Athena 是一项交互式查询服务,允许用户使用标准 SQL 直接分析存储在 Amazon S3 中的数据。
借助 Athena,您可以在无需复杂 ETL 的情况下对存储于 S3 的大型数据集运行 SQL 查询,是进行快速数据探索和深入分析的有力工具。无论是查看单个 CSV 文件,还是查询大型分区数据集,这种灵活性都能快速产出洞见。
AWS Athena 的一大优势是其无服务器架构,免去了管理底层基础设施的负担——无需预置、扩容或管理服务器。Athena 会自动扩展以适配任意数据规模,从 GB 到 PB 级,无需人工干预。
这种无服务器设计降低了开销,简化了快速试验与部署,尤其适用于工作负载波动的环境。
Athena 的无服务器架构也具备高性价比,无需前期费用——用户只需为已运行的查询付费。
AWS Athena 的功能
以下是使 Athena 在 AWS 生态中独树一帜的一些功能。
1. 无服务器架构
如前所述,AWS Athena 采用无服务器架构,意味着您无需管理或配置服务器。该设计允许 Athena 根据查询规模与复杂度自动扩展,既适用于小数据集,也能胜任多拍字节级的海量工作负载。
无服务器模型消除了前期基础设施成本,且您只为执行过的查询付费,既灵活又具成本效益。
2. 与 AWS Glue 及其他服务的集成
Athena 可与 AWS Glue 集成,包括 Glue Data Catalog(全托管元数据存储库)。
AWS Glue 可自动爬取数据源以发现并编目您的数据集,将表定义、模式与位置信息存储在 Glue Data Catalog 中。借助此集成,Athena 用户无需手动定义模式或管理元数据,即可轻松查询数据集。
Glue Data Catalog 还支持版本控制、模式演进与数据血缘追踪等能力,提升数据资产的可管理性与可追溯性。
此外,Athena 还可与其他 AWS 服务集成,例如用于数据可视化的 Amazon QuickSight、用于审计的 AWS CloudTrail,以及用于数据存储的 Amazon S3。这种紧密集成使用户能够在 AWS 生态内构建完善的数据管道与分析解决方案。
3. 支持标准 SQL
Athena 支持标准 SQL,您可以用熟悉的 SQL 语法查询 S3 中的数据。这确保了无论新手还是有经验的数据从业者,都无需学习新语言即可编写并执行查询。
Athena 的 SQL 引擎基于 Presto,这是一种开源的分布式 SQL 查询引擎,支持强大而灵活的查询能力,包括复杂关联、窗口函数以及数组与映射等数据类型。
4. 支持多种数据格式
Athena 可查询多种格式的数据,包括 CSV、JSON、Avro、Parquet 与 ORC。通过支持 Parquet 与 ORC 等列式格式,Athena 仅扫描必要的列以优化查询性能与成本,减少处理的数据量。
5. 可扩展性、分区与性能
Athena 构建用于处理任意规模数据集上的查询,会自动扩展以满足工作负载需求。其默认并行运行查询,能够高效处理大规模查询。
Athena 允许您在 S3 中对数据进行分区,大幅提升查询性能并降低成本。按日期或区域等字段对数据分区,可使 Athena 仅扫描数据集的相关部分,最小化处理的数据量。
6. 安全与合规能力
Athena 提供完善的安全特性以保护您的数据并确保遵循各类法规。它与 AWS 身份与访问管理(IAM)集成以实施访问控制,允许您定义谁可以访问特定数据集及其查询能力。
此外,Athena 支持静态与传输中加密,确保数据安全。它还符合多项行业标准与法规,适用于合规要求严格的环境。