Redash が Amazon Athena を正式サポートしたので試してみた
Posted on
- #aws
最近、個人事業のお仕事で Redash を使ったデータ分析をやっています。データ分析は「10 年戦えるデータ分析入門」を読んで興味を持っていたので、とてもいい機会をいただきました。
今回は RDBMS の他に S3 にあるログデータも分析したいので Athena を使うつもりですが、ちょうど Redash が Athena を正式サポートしたので試してみました。
ちなみに、2 月 7 日時点で Athena が使えるのは Hosted 版だけです。自分のサーバにインストールする OSS 版は v1.0.0
で対応するようなので、もう少し待ちましょう(OSS 版は v1.0.0-rc.1
までリリースされています)。
If you run Redash on-premise, you can either wait for the v1.0 release or back port the support to your current deployment.
Athena に接続する
サポートページに詳しい手順が載っていますが、AWS 側で設定するのは IAM 権限だけです。
- Redash 専用の IAM ユーザーを作成
- 作成したユーザーに
AWSQuicksightAthenaAccess
ポリシーと S3 の Read 権限を付与
S3 の Read 権限はインラインポリシーでも大丈夫ですが、自分は RedashReadOnlyAccess
というマネージドポリシーを作りました。
発行した credentials を Data Source の登録画面に入力します。
気をつけるところは次の 2 つです。
- AWS Region は us-east-1 / us-west-2 のどちらか
- 他のリージョンではまだ使えない
- S3 Staging Path は Athena の Setting から確認できる
- この S3 バケットに Athena の実行結果が出力される
Redash から Athena にクエリを投げてみる
正しく接続できれば Athena 側のデータベースが見えるはずです(初めての場合は sampledb
というデータベースがあります)。
自分は以前ブログに書いたデータベースが残っていたので、同じ SQL を Redash から投げてみます。
CloudFront のログから HTTP/2 のサポート状況を調べるクエリです。
SELECT
cs_protocol_version AS version,
COUNT(*) AS count
FROM
cloudfront_logs.blog_manabusakai_com
WHERE
cs_protocol_version IS NOT NULL
GROUP BY
cs_protocol_version
ORDER BY
count DESC
;
こんな感じで Athena にクエリを投げれます。クエリを投げるだけなら Redash を使う理由はないのですが、結果をグラフとして可視化できるのは Redash の強みですね。
ちなみに、Redash と Athena は JDBC で接続していました。
def run_query(self, query, user):
try:
data = {
'athenaUrl': 'jdbc:awsathena://athena.{}.amazonaws.com:443/'.format(self.configuration['region'].lower()),
'awsAccessKey': self.configuration['aws_access_key'],
'awsSecretKey': self.configuration['aws_secret_key'],
's3StagingDir': self.configuration['s3_staging_dir'],
'query': query
}
(snip)
まとめ
Redash を使えば Athena 単体ではできない可視化ができるようになります。
異なる Data Source、例えば RDBMS と Athena の結果を JOIN することもできるので、ますます夢が広がりますね!