Redash が Amazon Athena を正式サポートしたので試してみた

Posted on

最近、個人事業のお仕事で 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 権限だけです。

  1. Redash 専用の IAM ユーザーを作成
  2. 作成したユーザーに AWSQuicksightAthenaAccess ポリシーと S3 の Read 権限を付与

S3 の Read 権限はインラインポリシーでも大丈夫ですが、自分は RedashReadOnlyAccess というマネージドポリシーを作りました。

発行した credentials を Data Source の登録画面に入力します。

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 することもできるので、ますます夢が広がりますね!