Amazon Athena+AWS GlueでS3上のデータを分析してみた

こんにちは、保険システム部の照屋です。
今回は、Amazon AthenaとAWS Glueを使用して、S3上にあるCSVデータに対してクエリを実行してみます。
さらに、AthenaのデータをQuickSightで分析できるように、AthenaとQuickSightの連携も行います。

Amazon Athenaとは

Amazon Athenaは、標準SQLを使用してS3内のデータを分析することができるサービスです。
Amazon Athenaには、以下の特徴があります。

1. サーバレスである
 Athenaはサーバレスであるため、サーバインスタンスを立てたり、管理する必要がありません。
 S3にデータを保存し、テーブルを定義するだけでSQLクエリを実行することが可能です。
2. クエリごとに料金が発生
 Athenaでは、クエリでスキャンされるデータの量に対して料金が発生します。
 そのため、データの圧縮、分割、列形式への変換を行うことで、コストを削減することができます。
3.高速である
 クエリが自動的に並列で実行されるため、大規模なデータに対しても数秒で結果を得ることが可能です。

AWS Glueとは

AWS Glue は、完全マネージド型 ETL (Extract/Transform/Load、抽出/変換/ロード) サービスです。
Glueには、AWS Glue Data Catalogという、メタデータの保存や共有ができるメタデータストアがあります。

AthenaとGlueの関係性について

Athenaで、S3にあるファイルを分析するには、AWS Glue Data Catalogに対してクエリを実行します。
そのため、初めにGlueの構築を行い、その後にAthenaの構築を行います。

Glueの構築

今回は、Glueのクローラ機能を使用して構築を行います。
クローラとは、分析に使用したいファイルからデータを抽出し、AWS Glue Data Catalogにテーブル形式でメタデータを保存するプログラムです。

クローラの作成

今回は、全国の男女別人口に関するCSVファイルを使用します。
Glueのコンソール画面左側にある「クローラ」タブを開き、「クローラの追加」をクリックします。

Glue, クローラ追加

クローラ追加の画面に遷移し、クローラに関する情報を入力していきます。
まず初めに、クローラの名前を入力します。

Glue, クローラの名前

ソースタイプを選択します。今回はS3からクロールするため、ソースタイプは「Data stores」を選択します。
「Repeat crawls of S3 data stores」はS3からクロールする際に、全て再クロールするか、差分だけ再クロールするかなどを選択できます。今回は、全て再クロールする「Crawl all folders」を選択します。

Glue, ソースタイプ選択

続いてデータストアの追加を行います。
データストアの選択では、今回クロールするサービスであるS3を選択します。
インクルードパスには、クロールするファイルがあるフォルダを指定します。

Glue, データストアの追加

別のデータストアの追加の画面では、そのまま「次へ」をクリックします。
IAMロールの選択では、GlueやS3へのアクセス権限を持ったIAMロールを選択します。

Glue, IAMロール

クローラのスケジュールを設定する画面では、手動で実行するという意味の「オンデマンドで実行」を選択したまま「次へ」をクリックします。
クローラの出力を設定する画面では、既に作成されているデータベースを選択するか、新規にデータベースを追加することが可能です。
今回は、新規に追加するため、「データベースの追加」をクリックします。

Glue, クローラの出力

データベースの追加のポップアップが表示されたら、データベース名を入力して、「作成」をクリックします。
データベース名にはアンダースコア (_) を除く特殊文字はサポートされていないので、ハイフンなどは使用できません。(テーブル名も同様)

Glue, データベースの追加

クローラの設定に問題が無ければ、「完了」をクリックします。

Glue, クローラの設定確認

以上でクローラの作成は完了です!

クローラの実行

先ほど作成したクローラを実行して、テーブルを作成します。
Glueコンソール画面のクローラタブにある、先ほど作成したクローラを選択し、「クローラの実行」をクリックします。

Glue, クローラ実行

ステータスが「Ready」になったら、「テーブル」タブをクリックし、テーブルが作成されていることを確認します。

Glue, テーブルの確認

Athenaの構築

ここからは、Athenaの画面で操作をしていきます。
クエリを実行する際には、Athenaのコンソール画面から「クエリエディタを詳しく確認する」をクリックし、クエリエディタを開きます。

Athenaコンソール画面

Glueで作成したデータベースを選択すると、テーブルが表示されます。
Glueの画面でクローラを実行し、テーブルを作成すると、Athenaの画面にも自動的に表示されるようになります。

Athena, テーブルの確認

クエリを実行する

実際にクエリを実行してみます。
select文を実行して、テーブルにある全てのデータを抽出します。

Athena, クエリ実行

結果として、S3に置いたファイルのデータが出力されていることが確認できます。

QuickSightに連携

AthenaのデータをQuickSightに連携し、可視化するために、データセットを作成します。
QuickSightの画面左側にある「データセット」タブを開き、「新しいデータセット」をクリックします。

QuickSight, 新しいデータセット

データセット作成の画面で「Athena」を選択します。

QuickSight, データソースの選択

新規データソースを作成するポップアップ画面が表示されます。
データソース名を入力して、「データソースを作成」をクリックします。

QuickSight, データソース名

テーブルの選択画面で、今回作成したデータベースをテーブルを選択し、画面右下の「選択」をクリックします。

QuickSight, テーブルの選択

データセット作成の完了画面で、SPICEにインポートする方法か、直接クエリを実行する方法を選択できます。
今回はSPICEにインポートする方法を選択し、「データの編集/プレビュー」をクリックします。

QuickSight, SPICEへインポート

次の画面で、項目やデータ型などの確認・編集が行えます。
特に問題が無ければ、「保存して公開」をクリックします。

QuickSight, データセットの確認

以上でデータセットの作成が完了しました。

続いて、データを可視化して分析を行っていきます。
QuickSightの画面左側の「分析」タブを開き、「新しい分析」をクリックします。

QuickSight, 新しい分析

データセットの選択画面で、先ほど作成したデータセットを選択します。

QuickSight, データセットの選択

表示されたダイアログ画面の、「分析の作成」をクリックします。

QuickSight, 分析の作成

様々なグラフのビジュアルを指定して、分析を行うことができます。

QuickSight, 分析

以上でAthenaとQuickSightの連携が完了しました!

さいごに

AthenaとGlueを使用してS3のデータに対してクエリを実行する方法と、AthenaとQuickSightの連携方法を紹介しました。
今回は、CSV形式のファイルを使用しましたが、JSON形式などのファイルに対してもクエリを実行することが可能です。
また、AWSでデータ分析をするサービスは、Athenaの他にRedshiftなどがあります。
次回は、Redshiftの構築やQuickSightとの連携を試してみたいと思います!

AWS

Posted by yukiteru