0Pricing
Cloud & IT Cert Prep · 课时

Amazon Athena:S3 上的无服务器 SQL

在 Athena 中使用标准 SQL 直接查询 S3 数据,使用 Parquet 和 ORC 等列式格式进行优化,并通过分区控制成本

Amazon Athena:S3 上的无服务器 SQL 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

什么是 Amazon Athena

Amazon Athena 是一项无服务器交互式查询服务,可让您直接对存储在 Amazon S3 中的数据运行标准 SQL。您无需预置服务器,也无需管理集群,并且只需为每次查询扫描的数据付费(每扫描约 1 TB 数据需支付 5 美元)。Athena 底层使用 Presto,并与 Glue Data Catalogue 原生集成,以获取表元数据。

设置 Athena:工作组和输出位置

运行查询前,请配置一个 Athena 工作组,并指定用于输出查询结果的 S3 路径。工作组支持在团队之间分别管理查询历史和成本跟踪、强制对结果进行加密,并设置每次查询的数据扫描上限,以防止成本失控。每个查询结果都会以 CSV 格式写入配置的 S3 输出存储桶。

# Create a workgroup with an encrypted output location
aws athena create-work-group \
  --name analytics-team \
  --configuration '{
    "ResultConfiguration": {
      "OutputLocation": "s3://athena-results-123/analytics-team/",
      "EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}
    },
    "EnforceWorkGroupConfiguration": true,
    "PublishCloudWatchMetricsEnabled": true,
    "BytesScannedCutoffPerQuery": 10737418240
  }'

运行您的第一个查询

将 Athena 指向 Glue Data Catalogue 数据库,然后运行 ANSI SQL。Athena 支持 SELECT、JOIN、GROUP BY、窗口函数和 CTE。您还可以使用 CREATE TABLE AS SELECT (CTAS),将查询结果以 Parquet 格式保存为新表,从而有效地物化中间结果,加快后续查询。

-- Query total sales by month from partitioned S3 data
SELECT
  year,
  month,
  SUM(order_total) AS monthly_revenue
FROM my_db.curated_sales
WHERE year = '2024'
GROUP BY year, month
ORDER BY month;

-- CTAS: materialise result as Parquet for reuse
CREATE TABLE my_db.monthly_revenue
WITH (format = 'PARQUET', external_location = 's3://my-data-lake-123/curated/monthly_revenue/')
AS
SELECT year, month, SUM(order_total) AS revenue
FROM my_db.curated_sales
GROUP BY year, month;

成本优化:分区裁剪

Athena 按扫描的数据量计费,每 TB 扫描数据收取相应费用。最有效的成本降低方法是分区裁剪:始终在 WHERE 子句中包含分区列。如果数据按 year/month/day 分区,筛选这些列即可避免 Athena 扫描其他分区。如果面对 PB 级表时没有使用分区筛选,即使是简单查询也可能产生数百美元的费用。

-- EXPENSIVE: No partition filter -> scans all data
SELECT * FROM my_db.curated_sales WHERE customer_id = '12345';

-- CHEAP: Partition filter applied -> scans only Jan 2024
SELECT * FROM my_db.curated_sales
WHERE year = '2024' AND month = '01' AND customer_id = '12345';

成本优化:列式格式

将数据存储为 Apache Parquet 或 ORC,而不是 CSV 或 JSON,可以大幅减少 Athena 每次查询扫描的数据量。列式查询如果只访问 50 列中的 3 列,就只会扫描磁盘上这 3 列的数据。结合内置压缩(Snappy、Zstd),Parquet 文件通常比等效的 CSV 文件小 5–10 倍,从而进一步放大成本节省效果。

-- After converting raw CSV to Parquet:
-- CSV version: 500 GB table, query scans 500 GB -> $2.50
-- Parquet version: same data compressed to 50 GB,
--   query reads only 2 columns -> scans ~2 GB -> $0.01

-- Verify table format in Glue Catalogue
SHOW CREATE TABLE my_db.curated_sales;

使用数据源连接器执行联合查询

Athena 联合查询通过基于 Lambda 的数据源连接器扩展了 Athena 的查询范围,使其不仅能查询 S3,还能查询 RDS、DynamoDB、Redshift、Elasticsearch 和自定义数据源。您可以从 Serverless Application Repository 部署连接器 Lambda 函数,将其注册为 Athena 数据源,然后在单个 SQL JOIN 中跨 S3 表和实时数据库进行查询,无需事先移动任何数据。

-- Federated query: join S3 Parquet with live RDS table
SELECT s.order_id, s.total, c.email
FROM my_db.curated_sales s
JOIN rds_lambda.prod_db.customers c
  ON s.customer_id = c.id
WHERE s.year = '2024' AND s.month = '01';

Athena 与 QuickSight 的集成

Amazon QuickSight 可直接连接 Athena 作为数据源,让业务分析师无需中间数据库即可根据 S3 数据构建交互式控制面板。QuickSight 使用 SPICE(超快并行内存计算引擎)缓存 Athena 查询结果,以便快速呈现控制面板。这个无服务器 BI 技术栈(S3 + Glue + Athena + QuickSight)是考试中常见的经济高效分析方案。

优化 Athena 查询性能

除了分区和列式格式外,您还可以通过以下方式进一步优化 Athena 查询:拆分大文件(为了实现并行处理,每个文件建议为 128 MB–1 GB),对经常参与连接的列使用分桶,避免使用 SELECT *,以及在不要求精确值时使用 近似聚合函数,例如 approx_distinct() 和 approx_percentile()。这些技术可以同时降低成本和延迟。

-- Use approx_distinct for fast cardinality estimate
SELECT
  year,
  approx_distinct(customer_id) AS approx_unique_customers
FROM my_db.curated_sales
WHERE year = '2024'
GROUP BY year;

控制 Athena 的访问权限

Athena 与 IAM 集成以实现访问控制:用户需要运行 Athena 查询的权限(athena:StartQueryExecution)、访问 S3 输出存储桶的权限,以及读取底层 S3 数据的权限。如需精细控制列级和行级访问权限,请将 Athena 与 Lake Formation 结合使用。您还可以通过针对工作组 ARN 的 IAM 条件键,将工作组限制为只能访问特定数据库。

# Minimum IAM policy for an Athena analyst
{
  "Effect": "Allow",
  "Action": [
    "athena:StartQueryExecution",
    "athena:GetQueryExecution",
    "athena:GetQueryResults",
    "athena:StopQueryExecution",
    "glue:GetDatabase",
    "glue:GetTable",
    "glue:GetPartitions",
    "s3:GetObject",
    "s3:PutObject"
  ],
  "Resource": "*"
}

保存查询结果和计划查询

Athena 查询结果会以 CSV 文件的形式存储在 S3 中,并缓存 7 天,因此在此期间重新运行完全相同的查询时,不会再次扫描数据。对于定期报表需求,请使用 Athena 计划查询,按照 cron 计划运行查询,并将结果保存到新的 S3 位置或直接保存到表中。您也可以通过 Step Functions 状态机或 EventBridge 规则触发 Athena 查询。

# Start an Athena query via CLI and retrieve results
QUERY_ID=$(aws athena start-query-execution \
  --query-string 'SELECT COUNT(*) FROM my_db.curated_sales WHERE year=2024' \
  --work-group analytics-team \
  --query 'QueryExecutionId' --output text)

# Wait and fetch results
aws athena get-query-results --query-execution-id $QUERY_ID

Athena 与 Redshift:选择合适的工具

对于 SAA-C03 考试,您需要了解何时推荐 Athena,何时推荐 Redshift。在 S3 上执行临时且不频繁的查询,并且不想管理基础设施时,请选择 Athena。当您需要对复杂连接实现亚秒级响应时间、有专门的分析团队同时运行数百个查询,或者希望使用 Redshift Spectrum 通过 S3 数据扩展数据仓库时,请选择 Redshift。关键判断依据是查询的频率和复杂程度。

快速检查

测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。

课程回顾

本课您学到了:Athena 按扫描数据量计费,因此分区裁剪和 Parquet 格式是控制成本的关键,Athena 联合查询通过 Lambda 连接器将 SQL 查询扩展到非 S3 数据源,以及 Athena 最适合临时查询,而 Redshift 更适合高并发分析。接下来我们将探索 Kinesis,用于实时数据流处理和分析。

常见问题解答

「Amazon Athena:S3 上的无服务器 SQL」课时是免费的吗?

是的 — 「Amazon Athena:S3 上的无服务器 SQL」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「Amazon Athena:S3 上的无服务器 SQL」这节课中我会学到什么?

在 Athena 中使用标准 SQL 直接查询 S3 数据,使用 Parquet 和 ORC 等列式格式进行优化,并通过分区控制成本 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Amazon Athena:S3 上的无服务器 SQL」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 在 S3 上构建数据湖
  2. AWS Glue:ETL 与数据目录
  3. Amazon Athena:S3 上的无服务器 SQL
  4. Kinesis Streams、Firehose 与实时分析
← 返回 Cloud & IT Cert Prep