[ データ可視化ツール]RedashをDocker上で構築してRedshiftへ接続する

2019.10.28

はじめに

データアナリティクス事業本部のkobayashiです。

データを簡単に可視化するツールは色々ありますが、前職でよく利用していたRedashを久しぶりにチェックしてみたところstable版としてv7.0.0までリリースされていたので久しぶりにRedashを操作してみたかったのとインストール方法が変わっていたのでDocker環境で新規インストールして動かしてみました。また最近は自分がDWHとして専らRedshiftを使っているのでRedashとRedshiftを接続してみたのでまとめます。

環境

  • macOS Mojave
  • Docker version 19.03.1
  • docker-compose version 1.24.1

Redash

RedashはOSSのデータ可視化ツールで有名所のデータソースに対応しています。データソースの設定は各データソースごとに入力項目が切り替わるので簡単に設定できます。またクエリエディタが扱いやすいのでデータの抽出も難なくできます。可視化するツールとしても一般的なグラフは揃っています。

これからBIツールを導入してみたいがまずはBIツールというものを触ってみたいという場面では選択肢の一つになるかと思います。

GitHub - getredash/redash

Redash is an open source tool built for teams to query, visualize and collaborate. Redash is quick to setup and works with any data source you might need so you can query from anywhere in no time.

Redash was built to allow fast and easy access to billions of records, that we process and collect using Amazon Redshift ("petabyte scale data warehouse" that "speaks" PostgreSQL). Today Redash has support for querying multiple databases, including: Redshift, Google BigQuery, PostgreSQL, MySQL, Graphite, Presto, Google Spreadsheets, Cloudera Impala, Hive and custom scripts.

使い方の流れとしては、

  1. データソースを設定
  2. クエリを作成
  3. グラフ・テーブルなどでクエリを可視化
  4. ダッシュボードを作成

という形になります。

インストール

リポジトリのクローンと内容確認

GithubのRedashのリポジトリをローカルにcloneしてきます。

$ git clone https://github.com/getredash/redash.git

ディレクトリに入るとymlファイルがありますがこの内容を確認すると以下の記述があります。

$ cd redash/
$ cat docker-compose.yml 

# This configuration file is for the **development** setup.
# For a production example please refer to setup/docker-compose.yml.
version: '3.2'
services:
...

このymlをdocker-composeしてできる環境はRedash自体の開発用なので今回の様にRedashを立ててデータソースを連携したい場合はsetup/配下のdocker-compose.ymlを利用します。

$ cd setup/
$ tree
.
├── README.md
├── docker-compose.yml
├── generate_key.sh
├── packer.json
└── setup.sh

セットアップファイルの修正

ここでこの中のsetup.shを実行すれば/opt/redash配下に環境ができますが管理の面から以下のようなディレクトリ構造にしたいのでdocker-compose.ymlとsetup.shを修正します。

~/Documents/Docker/redash
├── docker-compose.yml
├── env
└── postgres-data # Redashのデータを保持するpostgres領域
    ├── PG_VERSION
    ├── base
    │   ├── 1
    ....
    └── postmaster.pid

  • docker-compose.ymlの差分
$ diff docker-compose.yml docker-compose.yml.org
7c7
<   env_file: ~/Documents/Docker/redash/env
---
>   env_file: /opt/redash/env
40c40
<     env_file: ~/Documents/Docker/redash/env
---
>     env_file: /opt/redash/env
42c42
<       - ~/Documents/Docker/redash/postgres-data:/var/lib/postgresql/data
---
>       - /opt/redash/postgres-data:/var/lib/postgresql/data

  • setup.shの差分
$ diff setup.sh setup.sh.org
5c5
< REDASH_BASE_PATH=~/Documents/Docker/redash
---
> REDASH_BASE_PATH=/opt/redash
26c26
<         sudo chown $USER:staff $REDASH_BASE_PATH
---
>         sudo chown $USER:$USER $REDASH_BASE_PATH
55,56c55,56
< #     REQUESTED_CHANNEL=stable
< #     LATEST_VERSION=`curl -s "https://version.redash.io/api/releases?channel=$REQUESTED_CHANNEL"  | json_pp  | grep "docker_image" | head -n 1 | awk 'BEGIN{FS=":"}{print $3}' | awk 'BEGIN{FS="\""}{print $1}'`
---
>     REQUESTED_CHANNEL=stable
>     LATEST_VERSION=`curl -s "https://version.redash.io/api/releases?channel=$REQUESTED_CHANNEL"  | json_pp  | grep "docker_image" | head -n 1 | awk 'BEGIN{FS=":"}{print $3}' | awk 'BEGIN{FS="\""}{print $1}'`
58d57
<     cp docker-compose.yml $REDASH_BASE_PATH/docker-compose.yml
60,66c59,65
< #     REDASH_BRANCH="${REDASH_BRANCH:-master}" # Default branch/version to master if not specified in REDASH_BRANCH env var
< #     wget https://raw.githubusercontent.com/getredash/redash/${REDASH_BRANCH}/setup/docker-compose.yml
< #     sed -ri "s/image: redash\/redash:([A-Za-z0-9.-]*)/image: redash\/redash:$LATEST_VERSION/" docker-compose.yml
< #     echo "export COMPOSE_PROJECT_NAME=redash" >> ~/.profile
< #     echo "export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml" >> ~/.profile
< #     export COMPOSE_PROJECT_NAME=redash
< #     export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml
---
>     REDASH_BRANCH="${REDASH_BRANCH:-master}" # Default branch/version to master if not specified in REDASH_BRANCH env var
>     wget https://raw.githubusercontent.com/getredash/redash/${REDASH_BRANCH}/setup/docker-compose.yml
>     sed -ri "s/image: redash\/redash:([A-Za-z0-9.-]*)/image: redash\/redash:$LATEST_VERSION/" docker-compose.yml
>     echo "export COMPOSE_PROJECT_NAME=redash" >> ~/.profile
>     echo "export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml" >> ~/.profile
>     export COMPOSE_PROJECT_NAME=redash
>     export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml
71c70
< # install_docker
---
> install_docker

インストールの実行

あとはsetup.shを実行すればRedash on Docker環境が出来上がります。

$ sh setup.sh 

Creating network "redash_default" with the default driver
....
Creating redash_server_1           ... done
Creating redash_adhoc_worker_1     ... done
Creating redash_scheduled_worker_1 ... done
Creating redash_scheduler_1        ... done
Creating redash_nginx_1            ... done

これでRedashが立ち上がるのでhttp://localhost:5000へアクセスすればセットアップ画面に遷移します。

Redshiftと接続

1.Redashへアクセスしユーザー登録を済ませると以下のような画面になるので 「Connect a Data Source」をクリックしデータソース設定へ進みます。

2.「New Data Source」よりRedshiftをクリックし設定へ進みます。

3.以下の様な形でRedshiftへの接続情報を登録します。特に難しいところは無いです。

4.画面上部のCreate -> Queryからクエリエディタへ進みます。

  • 左側にスキーマ、テーブルが自動的に表示される
  • オートコンプリート機能でテーブル名、カラム名、関数が補完される
  • クエリ結果をデータソースとして使用して、異なるデータソース間でデータ連携できる

といった機能を使えば簡単にSQLが記述できると思います。

5.記述したクエリを元に右下の「+New Visualization」タブからグラフ・テーブルを作成します。

あとは4,5を繰り返してデータを可視化して最終的にDashboardに閲覧したい情報をまとめれば可視化は完了です。

まとめ

RedashはOSSであり無料で使えるデータ可視化ツールとして導入も比較的簡単なので試しに可視化ツールを導入してみたい場合には非常に良いと思います。また、オープンソースコミュニティがあり活発に議論され更新も頻繁なので安心して使えるのではないでしょうか。

最後まで読んで頂いてありがとうございました。