← ハンズオン一覧に戻る

AWS Hands-on / Data Analytics

Glueが作ったテーブルを、
Athenaから問い合わせる

AWS GlueとAthenaは、同じ「データカタログ」を共有しています。Glueクローラーが自動生成したテーブルを、特別な追加設定なしにAthenaからそのまま問い合わせられることを確認します。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 35〜50 分 コンソールのみで完結
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須Glueクローラーでテーブルを自動生成した経験(クローラーの作成・実行操作)
  • あると良いAthenaでクエリを実行した経験

※ このハンズオンは すべてコンソールだけで完結します

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

AWS GlueとAthenaは、別々のサービスに見えますが、実は同じ「データカタログ」を見ています。Glueのクローラーが作成したテーブルは、Athena側で何かを設定し直す必要なく、そのまま問い合わせの対象として表示されます。

今回はGlueクローラーで自動生成したテーブルを、Athenaのクエリエディタから問い合わせ、2つのサービスが同じカタログを共有していることを確かめます。

GlueとAthenaを連携させるための、特別な設定が必要なの?

いいえ、必要ありません。GlueのデータカタログはAWSアカウント内で共有されるリソースであり、Athenaは標準でこのカタログを参照します。Glue側でテーブルを作れば、Athena側からは自動的に見えるようになります。

クローラーで作ったテーブルと、Athenaのクエリエディタで手動定義したテーブルに違いはあるの?

どちらも同じデータカタログに保存される「テーブル」という点では同じです。作り方(自動推測か、手動定義か)が違うだけで、Athenaからの問い合わせ方法には違いはありません。

Goal

Glueクローラーで自動生成したテーブルを、Athenaのクエリエディタから問い合わせ、結果が正しく返ってくることを確認する。

04 — Architecture

つくる構成

Glueが作ったテーブルに、Athenaから橋を架けるイメージです。データカタログという1つの台帳を、2つのサービスが両側から参照します。

05 — Requirements

要件

以下の要件を満たし、GlueとAthenaの連携を体験してください。

No要件
1Glueクローラーで自動生成したテーブルが、データカタログに存在している状態であること(未作成の場合は先に作成する)。
2Athenaのクエリエディタで、クエリ結果の出力先(S3)を設定済みであること。
3Athenaのデータベース一覧から、クローラーが使用したデータベースを選択し、テーブルが表示されることを確認する。
4SELECT * FROM テーブル名 LIMIT 10; 相当のクエリを実行し、結果が返ってくることを確認する。
5列を1つ指定した WHERE 句付きのクエリ(例:特定の条件で絞り込む)を実行し、絞り込まれた結果を確認する。
06 — Steps

構築の進め方

「Athena側の準備を整える」→「テーブルが見えることを確認する」→「クエリを実行する」という順番で進めます。

  1. フェーズ1 — Athenaの準備を整える
  2. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが、クローラーを実行したリージョン(例:アジアパシフィック(東京)ap-northeast-1)と一致していることを確認します。

  3. Athenaのクエリ結果出力先を設定する

    Athenaコンソールを開き、まだ設定していなければ「設定」からクエリ結果の保存先となるS3の場所を指定します。

    未設定だとクエリが実行できない

    出力先が未設定の場合、クエリ実行時にエラーになります。先にここを済ませておきましょう。

  4. フェーズ2 — テーブルが見えることを確認する
  5. クエリエディタでデータベース・テーブルを確認する

    Athenaのクエリエディタ画面で、左側の「データベース」からクローラーが使用したデータベースを選びます。「テーブル」欄に、クローラーが自動生成したテーブル名が表示されていることを確認します。

  6. フェーズ3 — クエリを実行する
  7. まずは全件取得のクエリを実行する

    クエリエディタに次のように入力し、「実行」を選びます。

    -- テーブル名は実際のものに置き換える
    SELECT * FROM employees_table LIMIT 10;

    結果がテーブル形式で表示されることを確認します。

  8. 条件を絞り込んだクエリを実行する

    テーブルの列の1つを使って、WHERE 句で絞り込んだクエリを実行します(例:特定の部署や年で絞り込む)。

    これがゴール

    クローラーが「自動的に」作ったテーブルに対して、Athenaから自由にSQLを書けている——この状態を確認できたら、このハンズオンの目的は達成です。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。

Pitfall 01 — テーブルが一覧に出てこない

「クエリエディタにテーブルが表示されない」

画面右上のリージョンと、選択している「データベース」が、クローラーを実行したときのものと一致しているかを見直しましょう。

Pitfall 02 — クエリがエラーになる

「クエリを実行したらエラーが表示される」

クエリ結果の出力先(S3)が設定済みか、列名の表記(大文字・小文字、スペースの有無)がテーブルのスキーマと一致しているかを見直しましょう。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。

  • Athenaのクエリエディタの「テーブル」欄に、Glueクローラーが作成したテーブルが表示されている。
  • SELECT * クエリの実行結果が、表形式でクエリエディタの下部に表示されている。
  • WHERE 句で絞り込んだクエリの結果件数が、全件取得時より少なくなっている。
  • クエリ実行履歴に、実行したクエリと「成功」のステータスが記録されている。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. GlueとAthenaが同じデータカタログを共有していることは、どんな運用上のメリットにつながるでしょうか。
    ヒント
    テーブルを「一度だけ」定義すれば、複数のサービスから使い回せる、という観点で考えてみましょう。
  2. もしクローラーを使わず、すべてのテーブルを手動で定義していたら、どのような手間が増えるでしょうか。
    ヒント
    ファイルが増えるたびに列構成を確認する作業を、誰がいつ行うのか考えてみましょう。
  3. Athena以外に、このデータカタログを利用できそうなAWSサービスにはどのようなものが考えられるでしょうか。
    ヒント
    データの分析・変換を行うサービスは、データの「場所」と「構造」を知る必要があります。その情報をどこから得るかという観点で考えてみましょう。
10 — Clean up

後片づけ

作成したリソースを順番に削除します。

  1. Athenaのクエリ結果(S3)を削除する:クエリ結果の出力先に保存されたファイルを削除します。
  2. テーブル・データベースを削除する:Glueデータカタログ上のテーブルとデータベースを削除します(このハンズオンのために作成した場合)。
  3. クローラー・IAMロールを削除する:使用したクローラーや専用のIAMロールが残っている場合は削除します。
  4. S3バケットを空にして削除する:元データやクエリ結果の保存に使ったバケットを削除します。

コストに関する注意: Athenaは、クエリでスキャンしたデータ量に応じて課金されます。少量データへの問い合わせであれば料金はごく小さく済みますが、不要になったら検証用のデータは削除しておきましょう。Glueデータカタログ自体の保存・アクセスは、一定数まで無料利用枠の対象になっています。S3の保存容量・リクエストにも別途料金がかかりますが、少量であれば無料利用枠の範囲内に収まることが多いです。検証が終わったら、上の「後片づけ」に沿って忘れずに削除しましょう。最新の料金は AWS の公式料金ページで確認してください。