Athenaを利用し、Amazon S3のデータをデータセットに設定してみた。

2021.10.01

こんにちは、イムチェジョンです。
今回のブログではAthenaを利用してAmazon S3バケットのデータをデータセットに設定する方法をまとめました。

アジェンダ

  1. Athenaとは?
  2. S3バケットのデータをデータセットに設定

1. Athenaとは?

  • 標準SQLを使ってAmazon S3に保存されたデータを簡単に分析できる対話式クエリサービス
  • Athenaはサーバーレスサービスであるため、管理するインフラがなく、実行したクエリに対してのみ費用を支払えばいいです。
  • Amazon S3に保存されたデータを指してスキーマを定義した後、標準SQLを使用してクエリを始めるだけです。 それでは大部分結果が数秒以内に提供

2. S3バケットのデータをデータセットに設定

データセットするバケットの作成

今回はS3のアクセスログの情報をデータセットに作ってみます。
アクセスログのバケットは省略して進めます。
アクセスログのバケット作成は以下のドキュメントをご参考ください。
https://dev.classmethod.jp/articles/lim-s3-access-log/

Athenaでクエリ作成

Athenaページに入ります。

最初にクエリの結果を保存するS3を設定する必要があるので、[設定]をクリックします。

クエリ結果を保存するS3バケットを入力し、保存します。

これからS3アクセスログを分析するために作成するデータベースとテーブルは下のページを参考しました。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/analyze-logs-athena/?nc1=h_ls

新しいデータベースを作成します。

CREATE DATABASE s3_access_logs;

新しいテーブルも作成します。

CREATE EXTERNAL TABLE `s3_access_logs.mybucket_logs`(
`bucketowner` STRING,
`bucket_name` STRING,
`requestdatetime` STRING,
`remoteip` STRING,
`requester` STRING,
`requestid` STRING,
`operation` STRING,
`key` STRING,
`request_uri` STRING,
`httpstatus` STRING,
`errorcode` STRING,
`bytessent` BIGINT,
`objectsize` BIGINT,
`totaltime` STRING,
`turnaroundtime` STRING,
`referrer` STRING,
`useragent` STRING,
`versionid` STRING,
`hostid` STRING,
`sigv` STRING,
`ciphersuite` STRING,
`authtype` STRING,
`endpoint` STRING,
`tlsversion` STRING)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://# lim-logging-202108/logs/'

テーブルが作成されました。

テーブルの情報を確認してみましょう。

バケットに保存されていたログの内容がデータベースに保存されました。

また、クエリ結果は設定したS3バケットに保存されます。

この後はSELECT文を使い、欲しいデータだけを出力することもできます! Athenaを利用し、Amazon S3バケットのデータをデータセットに設定する方法でした。