Superset vs Redash

こんにちは。リブセンスで分析基盤エンジニアをやっている @hiro-koba と申します。
この記事は[Livesense Advent Calendar 2016 その3](http://qiita.com/advent-calendar/2016/livesense_3)の11日目となっています。
弊社Advent Calendarは[その3](qiita.com/advent-calendar/2016/livesense_3)以外に[その1](qiita.com/advent-calendar/2016/livesense_1)、[その2](qiita.com/advent-calendar/2016/livesense_2)もございますので、併せてご覧くださいませ。

## はじめに

弊社では分析基盤を自社開発しており、サイト上の行動データを、コンバージョンデータや属性データ等と紐付けて分析可能な環境を持っております。
そこで貯まったデータを利用し、以下のような用途で使用しております。

1. KPIモニタリング
    * 流入数・CV数などの達成状況把握
    * 異常値の発見
2. 探索的分析
    * サイト上等に問題があった場合、ユーザーのPV単位まで遡って調査
3. レコメンデーション
    * 行動ベースでの求人レコメンド

特に1のような用途において、「ダッシュボードツール」と呼ばれる、データをグラフなどで可視化してくれるツールを使用することが多いと思います。
今回はこのダッシュボードツールを比較してみようと思います。

## 紹介するツール

今回選んだのは以下の2つです。OSSで最近有名なツールという事で選定しました。

* [Superset](https://github.com/airbnb/superset)
* [Redash](https://github.com/getredash/redash)

Redashは1年前のAdvent Calendarでも記事が見受けられ、すでにダッシュボードツールとして定着してきているように思えます。
対するSupersetは最近名前を聞くようになった、比較的新しいダッシュボードツールと言えるでしょう。

## 比較すること

ざっくり以下の様なことを比較していこうと思います。

* 導入
    * 導入・構築容易性
* 対応データソース
    * DB・DWH
    * データセット
* データ操作
    * フィルタ条件指定
    * グルーピング機能
* アウトプット
    * グラフ
    * その他アウトプット
* 勢い
    * 開発の勢いなど

## 導入

さすがモダーンなサービスだけあって、両者ともに簡単に試すことが出来ました。
本番での運用等を考えた際、AMIやクラウドホスティング版があるRedashは嬉しいですね。

||Superset|Redash|
|:---:|:---:|:---:|
|Dockerイメージ|有（※1）|有|
|AMI (Amazon Machine Image)|無|有|
|クラウドホスティングサービス|無|有|

※1 非公式?ならイメージ有り。DockerhubでSupersetと検索すると、いくつかのイメージがヒット。そのうち[amancevice/superset](https://hub.docker.com/r/amancevice/superset/)を試した所、簡単にテスト用の環境が構築出来ました

## 対応データソース

### DB・DWH

有名所をピックアップしましたが、大体接続出来るようです。
SupersetはSQLAlchemyで接続できるか否かにかかっているようです。
（※◯とは書いていますが、自分で簡単に動かしたの限りのことと、ネット上の情報で判断しているので、完全に動作互換があるか検証はできていませんゴメンナサイm(__)m）

ちなみにTD(Presto)に接続した際にTIMESTAMP型の列が正しく認識されないバグがありますが、すでに[Issue](https://github.com/airbnb/superset/issues/1207)が出ており、対応中のようです（早い！）

||Superset|Redash|
|:---:|:---:|:---:|
|MySQL|◯|◯|
|PostgreSQL|◯|◯|
|SQLite|◯|◯|
|Redshift|◯|◯|
|TreasureData|◯|◯|
|BigQuery|✕|◯|

#### Supersetのデータソース選択画面

ちょっとややこし目ですね。SQLAlchemy URIもフォーマット見ながら自分で入力する必要があります。

<img width="1440" alt="superset_database.png" src="https://qiita-image-store.s3.amazonaws.com/0/61228/9049bfaa-3ee5-dce5-0276-fdf310f3db17.png">


#### Redashのデータソース選択画面

こちらはシンプルで、データソースを選んだら必要な項目を入力するだけで良いようになっています。

<img width="1440" alt="redash_database.png" src="https://qiita-image-store.s3.amazonaws.com/0/61228/047534e6-2fdc-60d9-d9ff-0948f747ece2.png">


### その他データソース

SupersetではDB・DWHへの接続しか対応していませんが、Redashは以下のようなデータソース・データセットにも対応しています。

* CSV
* Google Spreadsheet
* JIRA
* Kibana
* URL?

## データ操作

次に、ダッシュボードに出力する内容をどのように操作できるか比較してみます。
条件を指定したデータの絞込、グルーピングなどです。

||Superset|Redash|
|:---:|:---:|:---:|
|UIによる操作|◯|✕|
|SQLによる操作|◯|◯|
|集計関数|全てサポート（UI操作時はCOUNT(*)とAVGとSUMのみ）|全てサポート|
|絞込・条件指定|◯|◯|
|グルーピング|◯|◯|

### Redashデータ操作画面

SQLを書く前提で作られています。SQLのフォーマッタや保管機能なども充実しており、SQLが書きやすい環境ではありますが、とは言えSQLを1から書く必要があります。

![New_Query__Redash.png](https://qiita-image-store.s3.amazonaws.com/0/61228/333ed30c-b1e2-7860-b483-adaab4e9b42c.png)

### Supersetデータ操作画面

こちらはRedashの画面とはガラッと変わり、SQLを書かせる気配がありません。グラフを最初に選び、それに必要なデータをUIから入力するだけの簡単設計です。
（Google AnalyticsのWeb UIのように、フィルタ要素等を選択しながら探索しているのと似たイメージですね）
また、SQLを書きたい場合、ナビバーの「SQL Labs」を選ぶとRedashのようにSQLからデータを可視化することが出来ます。

![_explore__birth_names.png](https://qiita-image-store.s3.amazonaws.com/0/61228/d772e2f8-0142-96f3-ec17-61fb4ccf5004.png)

UIといえど一応カスタムのWHERE句は追加できるようになってはいます。

![_explore__birth_names2.png](https://qiita-image-store.s3.amazonaws.com/0/61228/a6d63380-b026-8bd4-3aa4-9e13dbce18bf.png)

UIからデータを操作する場合、集計関数はCOUNT(*)とAVGとSUMのみで、選べるものも限られています。
複雑な集計が必要な場合、事前にSQL Labsからデータ整形→データソースへの追加を行い、そこからグラフを作ると良さそうです。

![_explore__birth_names3.png](https://qiita-image-store.s3.amazonaws.com/0/61228/e4f460e6-d26b-611b-8b0f-9728ea1baade.png)

## アウトプット

### グラフ

次に、ダッシュボードツールのメイン機能であるグラフ出力系の比較です。あまり差はなさそうですね。
（呼び方違うだけで実は同じのが合ったらごめんなさい・・・）

#### Table系

||Superset|Redash|
|:---:|:---:|:---:|
|Table view|◯|◯|
|Pivot table|◯|◯|

#### Chart系

||Superset|Redash|
|:---:|:---:|:---:|
|Line chart|◯|◯|
|Bar chart|◯|◯|
|Area chart|✕|◯|
|Pie chart|◯|◯|
|Bubble chart|◯|✕|
|Scatter chart|✕|◯|

#### その他グラフ

||Superset|Redash|
|:---:|:---:|:---:|
|コホート|✕|◯|
|ヒートマップ|◯|✕|
|積み上げ|◯|✕|
|地図|◯|◯|
|Treemap|◯|✕|
|Sankey|◯|◯|
|Word Cloud|◯|◯|

### その他アウトプット

Supersetには無いですが、Redashは以下のような機能も兼ね備えています。

* アラート機能
    * クエリ結果によってHipChatやSlackなどに通知を送ることが出来ます

## 勢い

Supersetの方が後発ということもあり、直近のIssueやPRが多いのはさておき、Star数がすでに3倍以上あることから勢いがありそうですね。
※各数値は2016-12-11 22時現在の数字です。

||Superset|Redash|
|:---:|:---:|:---:|
|Star数|9885|2854|
|Issue数|335|159|
|Pull Request数|38|19|

## まとめ

### Redash

Redashはデータの可視化だけでなく通知なども行える、万能型ダッシュボードツールでした。
SQLが書ける人にとっては補完やフォーマッタが便利ですね。
また接続可能なデータセット数もほぼ網羅している感があり、そういった点でもSupersetより一日の長があると言えるでしょう。

### Superset

UIからのデータ操作が非常にシンプル＆直感的で好印象でした。UIでは表現出来ない複雑な集計も、SQL Labsを使用して事前集計可能で、かなり幅広い操作が行えそうです。
（エンジニアさんが事前にSQL Labsで集計済みのデータソースを追加し、ディレクターさんがUIで条件をいじりながら分析するみたいな使い方ができそうですね）
接続可能なデータソースもRedashに比べると網羅性は低いですが、最近のDWH系は大体接続できるのであまり問題ではないでしょう。

### 最後に

以上、Superset vs Redashというたいそうなタイトルで比較を行いましたが、いかがでしたでしょうか。
今年こそはネタを仕込んでまとめ以外のことをやりたかったのですが、結局まとめに走ってしまいましたごめんなさい。
明日は12日目です！ @nwatanabe さん宜しくお願いします！