DEA / ドメイン3 データ運用とサポート

重要な内容

Amazon Athena

は、 に置いたデータに、サーバーを用意せずに で問い合わせられるのクエリサービスです。テーブルの定義 (列の名前と型、データの場所) は Data Catalog から読み、データ本体は S3 から直接読みます。料金は主にクエリがスキャンしたデータ量で決まります。

DEA では、Data Catalog を使ったクエリ、 と INSERT INTO による変換、ビュー、ワークグループによるコストの管理、クエリ結果の再利用、、 対応のノートブックによるデータの探索が問われます。

Point
  • Athena はギリシャ神話の知恵の女神アテナの名前です。
  • CTAS = CREATE TABLE AS SELECT の略で、SELECT の結果から新しいテーブルを作る SQL です。
  • Workgroup = 作業グループ で、クエリの実行設定とコストの上限をまとめる単位です。

概要

は、データを動かさずに の上で を実行します。

概要の図 利用者 / アプリコンソール・JDBC・API ワークグループ結果の場所・上限 Athena の SQL エンジン Glue Data Catalogテーブル定義 S3 のデータParquet・CSV・JSON など フェデレーテッドクエリLambda のコネクタ DynamoDB・RDS など クエリ結果S3
用途内容
アドホックな分析S3 のに、その場で SQL を投げます。
データの変換 や INSERT INTO で、CSV を に変換したり、集計済みのテーブルを作ったりします。
ログの分析、 フローログ、S3 アクセスログ、 のログを SQL で調べます (#65)。
からの参照 などから Athena を経由して S3 のデータを可視化します。

試験では、「サーバーの管理なしに S3 のデータを SQL で分析したい」「たまにしか実行しない」「スキャン量でコストを抑えたい」という条件で Athena を選びます。


主要技術

①Data Catalog を使った SQL ⚠️ 頻出

はテーブルの定義を Data Catalog から読みます。テーブルは で自動作成するか、Athena の CREATE EXTERNAL TABLE で作ります。

パーティション (例: year=2026/month=10/day=17/ のような のプレフィックス) を定義すると、WHERE 句で指定したパーティションだけを読むため、スキャン量と時間が減ります。新しいパーティションの登録には次の方法があります。

方法動き向く場面
MSCK REPAIR TABLES3 を調べて Hive 形式のパーティションを一括で追加します時々まとめて追加するとき。パーティションが多いと遅くなります。
ALTER TABLE ADD PARTITION指定したパーティションを追加します取り込みのたびに追加するとき
Glue クローラースケジュールで S3 を調べて追加しますスキーマの変化も拾いたいとき
(partition projection)テーブルの設定からパーティションの値を計算し、カタログへの登録自体を不要にします日付などの規則的なパーティションが非常に多いとき

⚠️ 頻出: 「日付のパーティションが大量にあり、カタログへの登録とクエリの計画に時間がかかる」はパーティション射影です。


②CTAS、INSERT INTO、ビュー

用途ポイント
SELECT の結果から新しいテーブルを作ります出力の形式 (、 など)、圧縮、パーティション、を指定できます。CSV から Parquet への変換に使えます。
INSERT INTO既存のテーブルに SELECT の結果を追加します日次で新しいパーティションを追加する に使えます。
SELECT の結果を、指定した形式で に書き出しますテーブルを作らずに、結果を Parquet などで出力します。
CREATE VIEWSELECT を名前付きで保存した論理的なビューです結果は保存されず、参照のたびにクエリが実行されます。複雑な結合を隠して、利用者に簡単な名前で見せます。

のビュー (Athena ビュー) は、参照する利用者が元のテーブルへの権限を持っている必要があります。Athena と など複数のエンジンで同じビューを共有したい場合は、定義を Data Catalog に保存する Data Catalog ビューを使います。Data Catalog ビューは作成者の権限で評価される (definer の方式) ため、利用者に元のテーブルへの権限を与えずにビューだけを読ませられ、ビューへの権限は で付与します。

CTAS と INSERT INTO で1回に作れる (書き込める) パーティションは 100 までです。それを超える場合は、CTAS で 100 以内を作り、残りを INSERT INTO で 100 ずつ追加します。

のテーブルでは、Athena から UPDATE、DELETE、 も実行でき、行単位の更新や upsert ができます。


③ワークグループとコストの管理 ⚠️ 頻出

ワークグループは、チームや用途ごとにクエリを分ける単位です。

設定内容
クエリ結果の場所と暗号化ワークグループの全員の結果を、決めた の場所に、決めた暗号化で保存させます。
クエリごとのデータ使用量の上限1つのクエリのスキャン量が上限を超えたら、そのクエリをキャンセルします (最小 10 MB)。
ワークグループ全体のデータ使用量のアラート1時間や1日などの期間の合計スキャン量がしきい値を超えたら、 のと で通知します。クエリは自動ではキャンセルされません。
CloudWatch へのの送信ワークグループごとのクエリの件数、スキャン量、実行時間を見られます。
による利用者の制御ワークグループ単位で、誰が使えるかを制御します。

コストを下げる基本は、スキャン量を減らすことです。列指向の形式 (、)、圧縮、パーティション、必要な列だけを SELECT する書き方を組み合わせます。

⚠️ 頻出: 「1つのクエリが大量のデータをスキャンするのを防ぎたい」はクエリごとの上限、「チームの合計の使用量を見張って通知したい」はワークグループ全体のアラートです。


④クエリ結果の再利用

同じクエリを繰り返し実行する場合、クエリ結果の再利用を有効にすると、指定した最大経過時間 (既定 60 分、最大 7 日) 以内の前回の結果を返し、スキャンを省けます。同じワークグループの中でだけ再利用されます。

ただし、元のデータが変わっても最大経過時間までは古い結果が返ります。また、 の細かいアクセス制御 (行や列のフィルター) が付いたテーブルや、では再利用されません。


⑤フェデレーテッドクエリ

は、 以外のデータソース (、、、、のデータベースなど) に、 で動くデータソースコネクタを通して を実行する機能です。S3 のデータとほかのデータベースのデータを、データを移さずに1つの SQL で結合できます。

選択肢向く場面
のフェデレーテッドクエリたまに、複数のデータソースをまたいで調べたい
で S3 にまとめる頻繁に大量のデータを結合して分析する
Redshift のフェデレーテッドクエリRedshift の中から RDS / Aurora の最新データを参照したい

⑥Apache Spark 対応の Athena ノートブック

では のほかに、 でデータを探索できます。で、Spark の環境を用意せずに PySpark のコードを実行でき、必要な計算資源は自動で増減します。

実行の形内容
Athena コンソールのノートブックJupyter 互換のノートブックで、セルごとに Python (PySpark) を実行します (PySpark エンジンのバージョン 3)。
Unified Studio のノートブックApache Spark 3.5 のリリースでは、SageMaker Unified Studio のノートブックや Spark Connect に対応したクライアントから実行します。

Spark 用のワークグループを作り、セッションの中で計算 (calculation) を実行します。SQL では書きにくい複雑な変換や、Python のライブラリを使った探索に向きます。料金は、SQL のクエリのようなスキャン量ではなく、セッションで使った (Data Processing Unit) の時間で決まります。


⑦その他の性能とコストの選択肢

機能内容
プロビジョンドキャパシティ (容量予約) の単位で専用の処理能力を確保し、スキャン量ではなく確保した DPU の時間で課金します。割り当てたワークグループのクエリだけがその容量で動き、アカウントの DDL・DML ののに数えられないため、重要なクエリをほかの負荷から切り離せます。 の変更は不要です。 用のワークグループには使えません。
/ ODBC ドライバー ツールやアプリケーションから に接続します。
Athena の StartQueryExecution で非同期に実行し、GetQueryExecution で状態を確かめ、GetQueryResults で結果をページングで取得します (#61)。

試験対策

①判断マトリクス

問題文のキーワード選ぶ機能理由
で のデータに 、アドホックな分析サーバー管理なし、スキャン量の課金です。
CSV を に変換し、パーティションも付けたい (形式とパーティションを指定)SQL だけで変換できます。
日次で新しいデータをテーブルに追加INSERT INTO既存テーブルへ追加します。
100 を超えるパーティションを一度に作りたいCTAS + INSERT INTO の繰り返し1回の上限は 100 です。
複雑な結合を利用者に簡単な名前で見せたいビューSELECT を名前付きで保存します。
1つのクエリのスキャン量を制限ワークグループのクエリごとの上限超えたクエリをキャンセルします。
チームの合計スキャン量を監視して通知ワークグループ全体のアラート + しきい値で通知します。
同じクエリの繰り返しでコストを減らすクエリ結果の再利用前回の結果を返します。
S3 と / をまたいで SQL のコネクタで接続します。
日付パーティションが非常に多いカタログへの登録が不要になります。
でデータを探索、サーバーレスAthena の Apache Spark 対応ノートブックSpark の環境を用意せずに使えます。

②よくある誤答

  • のビューに結果が保存されると考えること。ビューは論理的な定義で、毎回クエリが実行されます。事前に集計した結果を保存するなら です。
  • スキャン量を減らすのに LIMIT を付けること。LIMIT は返す行を減らすだけで、読み込む量が減るとは限りません。パーティション、列指向の形式、列の絞り込みで減らします。
  • クエリごとの上限とワークグループ全体のアラートを混同すること。キャンセルするのはクエリごとの上限です。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください