Cloud Service
Amazon Athena
S3上のデータに標準SQLを直接実行できるサーバーレスなクエリサービス。サーバー管理なしでスキャン量に応じて課金。
- 1.S3に置いたファイルへ、データを移さず標準SQLでそのまま問い合わせる。
- 2.サーバー不要。クエリがスキャンしたデータ量に応じて課金される。
- 3.列指向フォーマットとパーティションでスキャン量を減らし高速・安価に。
解決する課題
S3にログやCSV、JSONを貯めたものの「分析するにはデータベースに取り込んで…」と手間がかかる、という場面は多くあります。Athenaなら:
- S3のデータを移動・ロードせずにその場で標準SQLで分析できる
- クラスタやサーバーを一切管理しない(サーバーレス)
- 使ったときスキャンした分だけ支払い、待機コストが発生しない
アドホックなログ調査、データレイクの探索的分析、たまにしか走らないレポート集計などに向きます。
主要概念と用語
- クエリエンジン: SQLの実行基盤。分散SQLエンジンをベースにしており、標準SQLでS3上のデータを処理する
- データカタログ: テーブルのスキーマ(列名・型・S3の場所)を管理するメタデータ。一般的にはAWS Glueデータカタログを利用する
- テーブル / スキーマ: S3上のファイル群を「表」として見せる定義。実データはS3に置いたまま
- パーティション: 日付などのキーでデータをフォルダ分割し、スキャン範囲を絞る仕組み
- ワークグループ: クエリを論理的に分離し、出力先・暗号化・コスト上限などをまとめて管理する単位
- クエリ結果の出力先: 実行結果を保存するS3バケット(ワークグループで指定)
仕様・制限・クォータ
- 課金は基本的にスキャンしたデータ量に対して発生する(圧縮・列指向・パーティションで削減可能)
- データの取り込みやインデックス作成は不要で、S3に置けばすぐクエリできる
- 一度に実行できる同時クエリ数や1クエリの実行時間などにサービスクォータがあり、必要に応じて引き上げを申請できる
- CSV、JSON、ORC、Parquet、Avroなど複数のフォーマットを扱える
- 結果は指定したS3に保存され、後から再取得できる
Athenaの料金とパフォーマンスは「読み取ったデータ量」でほぼ決まります。SELECT句で必要な列だけ選び、WHERE句でパーティションを絞ることが、そのまま節約と高速化になります。
内部の仕組み
Athenaはサーバーレスで、ユーザーがクラスタを用意する必要はありません。クエリを投げると、AWS側で必要な計算リソースが割り当てられ、S3上のオブジェクトを直接読み取って分散処理し、結果を指定のS3バケットへ書き出します。
- テーブル定義は実データではなくメタデータに過ぎず、データはS3に置いたまま(読み取り時にスキーマを適用する方式)
- スキーマはGlueデータカタログなどで管理し、複数サービス間で共有できる
- パーティションを使うと、WHERE句の条件に合致するフォルダだけを読むため、スキャン量を大幅に削減できる
Athenaはデータを内部に取り込みません。S3のオブジェクトを直接読むため、ファイル構成やフォーマットがそのままパフォーマンスとコストに影響します。
設計パターン / ベストプラクティス
- 列指向フォーマット(Parquet/ORC)へ変換: 必要な列だけ読めるため、スキャン量と料金を大きく減らせる
- パーティション設計: 日付やリージョンなど、よく絞り込むキーでフォルダ分割する
- 圧縮: gzipやsnappyなどで圧縮し、読み取りバイト数を減らす
- 小さすぎるファイルを避ける: 大量の小ファイルはオーバーヘッドになるため、適度なサイズへまとめる
- BIツール連携: ダッシュボード用途ではキャッシュやビューを併用し、繰り返しのフルスキャンを避ける
運用・監視
- 実行履歴から各クエリのスキャン量・実行時間を確認し、重いクエリを特定する
- ワークグループごとにクエリのスキャン上限(バイト数の上限)を設定し、想定外の高額クエリを抑止できる
- CloudWatchへメトリクスを送り、処理データ量や実行時間を監視できる
- CloudTrailでクエリ実行などのAPI操作を監査できる
コスト
- 基本はスキャンしたデータ量に対する従量課金で、待機中のコストは発生しない
- 列指向フォーマット化・圧縮・パーティションでスキャン量を減らすほど安くなる
- クエリ結果保存用のS3ストレージ料金は別途かかる
- ワークグループのスキャン上限で1クエリあたりの上限コストをガードできる
「Parquet等の列指向」「圧縮」「パーティション」の3つを押さえるだけで、同じ分析でもスキャン量が桁違いに減り、料金と実行時間の両方が改善します。
セキュリティ
- アクセス制御はIAMで行い、対象S3バケットやワークグループ単位で権限を絞る
- クエリ結果は保存時にS3側で暗号化でき、鍵はKMSで管理できる
- 通信はTLSで保護される
- 列・行レベルのきめ細かなアクセス制御は、データカタログのアクセス管理機能と組み合わせて実現できる
Well-Architected の観点
- コスト最適化: サーバー待機コストがなく、スキャン量削減がそのまま節約につながる。ワークグループで上限管理
- パフォーマンス効率: 列指向・圧縮・パーティションで読み取り量を減らし、必要な計算だけを実行する
- セキュリティ: 最小権限のIAM、結果の暗号化、監査ログの活用
- 運用上の優秀性: サーバー管理が不要で、SQLだけで分析を運用できる
試験で問われるポイント
- 「S3のデータをロードせず標準SQLで分析」「サーバーレスでアドホック分析」→ Athena
- 料金・速度を改善する定番は 列指向フォーマット化・圧縮・パーティション(スキャン量を減らす)
- 大規模で定常的なBI/ウェアハウス用途は Redshift、その場の探索的クエリは Athena
- スキーマ管理は一般に Glueデータカタログ と連携する
関連サービス・比較
データウェアハウスの Amazon Redshift とよく比較されます。常時稼働の大規模分析基盤か、その場限りのサーバーレスクエリかで選びます。
| 観点 | Athena | Redshift |
|---|---|---|
| 構成 | サーバーレス(管理不要) | クラスタ型(プロビジョニング) |
| データの場所 | S3を直接クエリ | クラスタへロードして保持 |
| 課金 | スキャンしたデータ量 | クラスタ稼働時間など |
| 向く用途 | アドホック・探索的分析 | 大規模で定常のBI/集計 |
ハンズオン / CLI例
# ワークグループの出力先を指定してクエリを非同期実行 → 実行IDを取得
QID=$(aws athena start-query-execution \
--query-string "SELECT status, count(*) FROM logs WHERE dt = '2026-06-13' GROUP BY status" \
--query-execution-context Database=mydb \
--work-group primary \
--result-configuration OutputLocation=s3://my-athena-results/ \
--query "QueryExecutionId" --output text)
# 実行状態とスキャン量を確認
aws athena get-query-execution --query-execution-id "$QID" \
--query "QueryExecution.{State:Status.State,Scanned:Statistics.DataScannedInBytes}"
# 結果の取得
aws athena get-query-results --query-execution-id "$QID"
AWS Service
Amazon Athenaを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
分析
比較で見る軸
クラウド: AWS / カテゴリ: 分析 / 難易度: basic
導入後に効く点
サーバー不要。クエリがスキャンしたデータ量に応じて課金される。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 分析
- 難易度
- basic
- 関連資格
- DEA-C01 / SAA-C03
- 設計柱
- cost / performance
判断チェックリスト
- 自社の用途が「分析 / cost」に近いか確認する。
- 強みである「S3に置いたファイルへ、データを移さず標準SQLでそのまま問い合わせる。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。