AthenaとGlueを利用して、データソースへのSQLクエリ実行環境を準備する

記事タイトルとURLをコピーする

こんにちは、CI2部の加藤ゆです。
Athenaを利用したデータ分析を実施するための環境準備作業をやっていきます。

Amazon Athena とは?

Athena の用途 - Amazon Athena

サーバーレスでS3に対して直接クエリの実行ができるサービスです。

データの保存先のS3を設定して、標準SQLでアドホックなクエリの実行が可能です。
クエリを実行するためのデータをフォーマットする必要はなく、S3においた生データに対して直接分析が出来ます。

AWS Glueとは?

フルマネージド型の ETL (抽出、変換、ロード) の AWS のサービス です。
複数の機能があるので、機能別に以下に記載します。

Glue Data Catalog

Glue では、 Glue Data Catalogにメタデータを保存しています。
データソース(S3)にどういったデータが入っているのかをカタログ化して、保存しておくようなイメージです。

GlueはGlue Data Catalog内のメタデータを使用してデータソースの変換、ETL ジョブの作成を行います。

Glueクローラ

How crawlers work - AWS Glue

Glue Data Catalogにメタデータを作成するプログラムです。
S3 のデータからデータベースとテーブルのスキーマを自動的に推論し、関連するメタデータを AWS Glue Data Catalog に保存します。

AWS Glue クローラを使用することで、データのスキーマを自動で検出して AWS Glue Data Catalog に登録できます。
以下のアクションを実行します。

  • データを参照し生データの形式、スキーマを判定
  • パーティションを検出してGlue Data Catalogへ登録

正常にクロールされたデータのテーブルは Athena からクエリが可能です。

AthenaとGlueの関係

AWS Glue との統合 - Amazon Athena

Athena は、AWS Glueの一機能であるGlue Data Catalog(メタデータストア) と統合しています。

Athenaを利用して分析をしているつもりでも、
その裏側ではS3 データに関するテーブルメタデータの保存と取得にAWS Glue Data Catalog を使用しています。

Athenaを利用するうえで、データベースとテーブルのスキーマを作成する方法は、以下の2通りです。

  • ①Glueで作成する
    • データソースに対して Athena 内から AWS Glue クローラを実行する
  • ②Athenaで作成する
    • Athena クエリエディタでデータ定義言語 (DDL) クエリを直接実行する

上記いずれかの方法で作成したのちに そのデータベースとテーブルのスキーマを使用して、Athena でデータ操作言語 (DML) クエリを使用することができます。

本記事でやること

Glueを利用してDB・Tableを定義し、AthenaでGlue Data Catalogのデータを参照します

前提条件

S3バケットにデータが保存済みであること。
※本記事ではS3バケットへのデータ格納方法は触れません

作業手順

1.Databaseの作成

まずDatabaseを作成します。
Athenaから直接クエリで作成することも可能ですが、今回はGlueで実行していきます。
この作業により、Glue CatalogにメタデータとしてDatabaseが作成されます。

マネジメントコンソールより、AWS Glue画面へ遷移し左のナビゲーションペインより [Databases] を選択

Database名を入力し、作成

GlueのDatabaseコンソール上にDatabaseが追加されていることが分かります。
またこの時同時にAthenaクエリエディタコンソール上でもDatabaseが追加されていることが確認できます。

このようにAthenaが裏でGlue Data Catalog のメタデータを利用していることが分かりますね。

2.AWS Glue データ カタログにテーブルを定義する

公式手順は以下をご覧ください
チュートリアル: AWS Glue クローラの追加 - AWS Glue Studio

Set crawler properties

Glueのクローラでスキーマの自動作成を設定していきます。

左のナビゲーションペインより [Crawler] を選択

クローラの名前を入力
ここでは、[handson]とします。

「既に Glue テーブルにデータがあるか?」と聞かれていますが、
今回事前に作成していないため「Not yet」とし、Add data sourceへ進みます。

Choose data sources and classifiers

今回データソースはS3を選択
(単一のクローラで複数のデータストアをクロールすることも可能です)

Network connection
データストアへのネットワークアクセスを設定する - AWS Glue
必要に応じて、この S3 ターゲットで使用するネットワーク接続を設定します。
データソースへの接続情報にあたります。JDBCで接続するデータベースやDynamoDBなどの接続を管理する機能です。

GlueジョブからVPC内のリソースにアクセスさせ、VPC内でジョブ実行させたい場合はConnectionを指定する必要があります。特に何も入力しなければ、何も使用しません。

Subsequent crawler runs
後続でクロールする際の条件を定義します

  • Crawl all sub-foldersCrawl(すべてのサブフォルダーをクロール)
    クローラを実行するたびに、毎度すべてのフォルダをクロールします。

  • Crawl new sub-folders(新しいサブフォルダーをクロール)
    前回のクロール以降に追加された Amazon S3 フォルダーのみがクロールされます。

  • Crawl based on events(イベントに基づくクロール)
    SQSのイベントに基づいて動作します。対象のSQSの指定が必要です。

追加したデータソースを指定して、次へ

Configure security settings

クローラーがS3にアクセスして AWS Glue Data Catalog でオブジェクトを作成するために、クローラにアクセス許可を付与する必要があります。

この場で [Create new IAM role] をすると、データソースのS3へのアクセス許可のインラインポリシーと、AWS 管理ポリシー[AWSGlueServiceRole] が自動で付与されます。

IAMロールの生成
[Create new IAM role] をする場合に生成されるIAMロールは以下です。
※ただし自動作成されるがゆえに、インラインポリシー名には任意の文字列が入ります。

IAM ロール名は 「AWSGlueServiceRole-」で始まりますので、フィールドにはロール名の後ろの部分を入力してください。

Set output and scheduling

テーブルを作成するDatabaseを指定します。
先程作成したDatabaseを設定してください。

Table name prefix
クローラで作成したテーブルの名前を識別するために、プレフィックスの指定が可能です。

Maximum table threshold
クローラーが生成できるテーブルの最大数を設定できます。
設定しない場合は、データのスキーマに応じてテーブルを自動作成しますが、 最大値を設定した場合、指定した数値を超えるとエラーの挙動となります。

テーブルを作成するDatabaseとクローラを実行する頻度(スケジュール)を設定することが可能です。
定期実行 or スケジュール設定が出来ます(最小精度は 5 分)が、今回はオンデマンドで実行します。

最後に確認画面が表示されたら、クローラを作成しましょう。
※ここでは「クローラが作成される」までであり、クロール実行はされていないのでご注意下さい。

3.クローラを実行する

左のナビゲーションペインより、 [Crawlers] を選択し作成したクローラを選択します

[Run Crawler] を押下するとすぐに実行されます

Statusが「Running」>「Completed」となれば完了です

Database作成時と同様に、GlueのTablesコンソール上に追加されていますし、
同時にAthenaのクエリエディタコンソール上でも指定したDatabaseの中にテーブルが追加されていることが確認できます。

4.AthenaでGlue Data Catalogのデータを参照する

ここまでで、Glue Data Catalog にDatabase/テーブルを作成がされています。
テーブルは、スキーマを含むデータを表すただのメタデータです。

Data Catalog のテーブルにはデータが含まれていません。
ここからはAthenaのクエリエディタで、本記事では全検索("SELECT * FROM <テーブル名>")までの実行を行います。

クエリエディタでSQLの実行

対象のDatabaseを選択したうえで、クエリエディタにSQLを記入します。

SELECT * FROM <テーブル名>

正しく実行されれば、エディタ下部に「クエリ結果」として、実行結果が出力されます。
このようにAthenaコンソール画面で標準SQLを実行が可能となりました。

おわり

Amazon Athenaを使ってS3のデータを分析するための準備手順をご紹介しました。
凝った設定は必要なく、GUIで実行環境を用意できますのでご参考になれば幸いです。

加藤 由有希 エンジニアブログの記事一覧はコチラ

エンタープライズクラウド部 所属

2020年4月に新卒入社