この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、イムチェジョンです。
今回のブログではAthenaを利用してAmazon S3バケットのデータをデータセットに設定する方法をまとめました。
アジェンダ
- Athenaとは?
- 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バケットのデータをデータセットに設定する方法でした。