AWS Athenaのテーブルを作成してクエリを実行してみる

2019年7月26日

今回はAthenaでテーブルを作成してクエリを実行してみたいと思います。

Athenaとは(公式リンク

詳しくは公式や他のサイトにいくらでも説明があるのでここでは簡単に

  • AWSのクエリ実行サービス
  • 独自のストレージはなくS3上のデータに対してクエリを実行することが可能
  • 料金は実行したクエリのサイズに応じて発生

普通のデータベースのようにストレージがなく実データはただのファイルのため、
INSERT、UPDATE、DELETEなどのクエリでデータを更新することはできません。
これらの点を見てもAthenaではデータ操作をすることは向いていません。
S3は容量に上限がないので大量のログをS3に集めて、
それをAthenaで分析するといった使い道が最適なサービスです。

作業手順

以下のような手順で作業を進めます。

  1. CSVデータ作成
  2. S3へアップロード
  3. Glueクローラーでテーブル作成
  4. Athenaでクエリ実行

Glueという新しい言葉が出てきました。

Glueとは(公式リンク

Glueは出来ることが多岐に渡ります。
ここで利用するのはクローラーとカタログの機能のみです。

CrawlerS3のデータを参照し対象データからスキーマ情報を抽出しカタログに保存
Data Catalogテーブルのスキーマ情報のようなメタデータを保存するリポジトリ
AthenaやEMR、Redshift Spectrumで利用できる

他にETL機能もありますが、私は特に使ってないです。

CSVデータ

この手のお試しをするときにデータの用意が一番面倒だったりします。そんな時に便利な テストデータ生成ツール
このサイトで簡単なユーザーデータを10万件作成します。

こんな感じで作成された実際のデータはこちら

ファイルサイズは4.6MBくらいでした。

S3へアップロード

てきとうにバケットを作成し、「user」という名前のフォルダを作成します。そこに先ほど作成したCSVファイルをアップロードします。

Glueクローラーでテーブル作成

AWS Glueのページよりクローラの追加を行います。

以下のような内容の入力を行いクローラーを作成します。

クローラーの名前:user
クローラーソースタイプ:Date stores
Choose a data store:S3
クロールするデータの場所:自分のアカウントで指定されたパス
インクルードパス:s3://athena-data-1752/user
別のデータストアの追加:いいえ

S3とGlueのフルアクセスをつけたIAMロールを選択

  • AmazonS3FullAccess
  • AWSGlueConsoleFullAccess

スケジュール:オンデマンド
データベース:test

作成されたらクローラーを実行します。

ファイルサイズも大きくないので40秒くらいで完了します。

完了したらこんな感じでテーブルが作られます。

CSVのヘッダー部分のidがへんになっていたので微調整・・・・

Athenaでクエリ実行

ここまできたら後はクエリを実行するだけです。

Athenaのページで以下のようなクエリを実行します。

select * from test.user limit 10

無事結果も出力されました!

まとめ

Glueクローラーでテーブルスキーマを自動で判別しテーブルを作成してくれるのはありがたいですね。
しかし日付が文字列型になっていたりと実用するには微妙なところもありそうです。

ひとまずAthenaのお試しをするにはひと手間必要になりますが、
ストレージ容量の心配もなく高パフォーマンスのクエリが実行できるのがすばらしいサービスだと思います!