はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- 必須Glueクローラーでテーブルを自動生成した経験(クローラーの作成・実行操作)
- あると良いAthenaでクエリを実行した経験
※ このハンズオンは すべてコンソールだけで完結します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
AWS GlueとAthenaは、別々のサービスに見えますが、実は同じ「データカタログ」を見ています。Glueのクローラーが作成したテーブルは、Athena側で何かを設定し直す必要なく、そのまま問い合わせの対象として表示されます。
今回はGlueクローラーで自動生成したテーブルを、Athenaのクエリエディタから問い合わせ、2つのサービスが同じカタログを共有していることを確かめます。
GlueとAthenaを連携させるための、特別な設定が必要なの?
いいえ、必要ありません。GlueのデータカタログはAWSアカウント内で共有されるリソースであり、Athenaは標準でこのカタログを参照します。Glue側でテーブルを作れば、Athena側からは自動的に見えるようになります。
クローラーで作ったテーブルと、Athenaのクエリエディタで手動定義したテーブルに違いはあるの?
どちらも同じデータカタログに保存される「テーブル」という点では同じです。作り方(自動推測か、手動定義か)が違うだけで、Athenaからの問い合わせ方法には違いはありません。
Glueクローラーで自動生成したテーブルを、Athenaのクエリエディタから問い合わせ、結果が正しく返ってくることを確認する。
つくる構成
Glueが作ったテーブルに、Athenaから橋を架けるイメージです。データカタログという1つの台帳を、2つのサービスが両側から参照します。
要件
以下の要件を満たし、GlueとAthenaの連携を体験してください。
| No | 要件 |
|---|---|
| 1 | Glueクローラーで自動生成したテーブルが、データカタログに存在している状態であること(未作成の場合は先に作成する)。 |
| 2 | Athenaのクエリエディタで、クエリ結果の出力先(S3)を設定済みであること。 |
| 3 | Athenaのデータベース一覧から、クローラーが使用したデータベースを選択し、テーブルが表示されることを確認する。 |
| 4 | SELECT * FROM テーブル名 LIMIT 10; 相当のクエリを実行し、結果が返ってくることを確認する。 |
| 5 | 列を1つ指定した WHERE 句付きのクエリ(例:特定の条件で絞り込む)を実行し、絞り込まれた結果を確認する。 |
構築の進め方
「Athena側の準備を整える」→「テーブルが見えることを確認する」→「クエリを実行する」という順番で進めます。
- フェーズ1 — Athenaの準備を整える
-
マネジメントコンソールにサインインし、リージョンを合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが、クローラーを実行したリージョン(例:アジアパシフィック(東京)ap-northeast-1)と一致していることを確認します。
-
Athenaのクエリ結果出力先を設定する
Athenaコンソールを開き、まだ設定していなければ「設定」からクエリ結果の保存先となるS3の場所を指定します。
未設定だとクエリが実行できない出力先が未設定の場合、クエリ実行時にエラーになります。先にここを済ませておきましょう。
- フェーズ2 — テーブルが見えることを確認する
-
クエリエディタでデータベース・テーブルを確認する
Athenaのクエリエディタ画面で、左側の「データベース」からクローラーが使用したデータベースを選びます。「テーブル」欄に、クローラーが自動生成したテーブル名が表示されていることを確認します。
- フェーズ3 — クエリを実行する
-
まずは全件取得のクエリを実行する
クエリエディタに次のように入力し、「実行」を選びます。
-- テーブル名は実際のものに置き換える SELECT * FROM employees_table LIMIT 10;結果がテーブル形式で表示されることを確認します。
-
条件を絞り込んだクエリを実行する
テーブルの列の1つを使って、
WHERE句で絞り込んだクエリを実行します(例:特定の部署や年で絞り込む)。これがゴールクローラーが「自動的に」作ったテーブルに対して、Athenaから自由にSQLを書けている——この状態を確認できたら、このハンズオンの目的は達成です。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。
「クエリエディタにテーブルが表示されない」
画面右上のリージョンと、選択している「データベース」が、クローラーを実行したときのものと一致しているかを見直しましょう。
「クエリを実行したらエラーが表示される」
クエリ結果の出力先(S3)が設定済みか、列名の表記(大文字・小文字、スペースの有無)がテーブルのスキーマと一致しているかを見直しましょう。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。
- Athenaのクエリエディタの「テーブル」欄に、Glueクローラーが作成したテーブルが表示されている。
SELECT *クエリの実行結果が、表形式でクエリエディタの下部に表示されている。WHERE句で絞り込んだクエリの結果件数が、全件取得時より少なくなっている。- クエリ実行履歴に、実行したクエリと「成功」のステータスが記録されている。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- GlueとAthenaが同じデータカタログを共有していることは、どんな運用上のメリットにつながるでしょうか。
ヒント
テーブルを「一度だけ」定義すれば、複数のサービスから使い回せる、という観点で考えてみましょう。 - もしクローラーを使わず、すべてのテーブルを手動で定義していたら、どのような手間が増えるでしょうか。
ヒント
ファイルが増えるたびに列構成を確認する作業を、誰がいつ行うのか考えてみましょう。 - Athena以外に、このデータカタログを利用できそうなAWSサービスにはどのようなものが考えられるでしょうか。
ヒント
データの分析・変換を行うサービスは、データの「場所」と「構造」を知る必要があります。その情報をどこから得るかという観点で考えてみましょう。
後片づけ
作成したリソースを順番に削除します。
- Athenaのクエリ結果(S3)を削除する:クエリ結果の出力先に保存されたファイルを削除します。
- テーブル・データベースを削除する:Glueデータカタログ上のテーブルとデータベースを削除します(このハンズオンのために作成した場合)。
- クローラー・IAMロールを削除する:使用したクローラーや専用のIAMロールが残っている場合は削除します。
- S3バケットを空にして削除する:元データやクエリ結果の保存に使ったバケットを削除します。
コストに関する注意: Athenaは、クエリでスキャンしたデータ量に応じて課金されます。少量データへの問い合わせであれば料金はごく小さく済みますが、不要になったら検証用のデータは削除しておきましょう。Glueデータカタログ自体の保存・アクセスは、一定数まで無料利用枠の対象になっています。S3の保存容量・リクエストにも別途料金がかかりますが、少量であれば無料利用枠の範囲内に収まることが多いです。検証が終わったら、上の「後片づけ」に沿って忘れずに削除しましょう。最新の料金は AWS の公式料金ページで確認してください。