OSSのBIツール比較(Metabase,Superset,Kibana)

## はじめに

Webアプリとして使えるOSSのBIツール　**Metabase**、**Apache Superset**、**Kibana**の３種を比較した。

KibanaはOSS版、無償版、有償版とあるがOSS版で比較。

なお、OSSのBIツールは、この他にReDashなど他にも選択肢はある。


## 基本情報

2020/11現在

|項目|Metabase|Superset|Kibana|
|:---|:------:|:------:|:----:|
|最新バージョン|v0.37|v0.37|v7.10|
|Githubスター数|22.7K|1.3K|15.1K|
|言語/プラットフォーム|Clojure/JVM製|Python/CPython製|TypeScript/Node.js製|
|ライセンス|AGPL<br>※アプリ組込に関しては<br>制約の少ない独自ライセンスあり|Apache2.0|Apache2.0(OSS版)<BR>Elastic(無償・有償版)|
|商用版|あり|なし|あり|
|主なメンテ企業・団体|Metabase社|Apache Software Foundation|Elastic社|
|日本語ローカライズ|〇|ほぼ×|×(OSS版)<BR>○(無償版)|
|RDB系|〇|〇|×|
|NoSQL,ビッグデータ系|〇Mongo,Druid,Presto他|◎Druid,Hive,Presto,Impala他|△Elasticsearchのみ|
|クラウド系|〇Redshift,Athena,BigQuery他|〇Redshift,Athena,BigQuery他|×|

## セットアップ（起動）

|Metabase|Superset|Kibana|
|:------:|:------:|:----:|
|○       | ×      | ○    |

なお、MetabaseはJava、SupersetはPythonが必要だが、そのセットアップは比較しない。

ApacheSupersetはPython製のため、セットアップの難易度が高め（MetabaseやKibanaは*Battery Included*）。

### Metabase
すごく簡単。単一JARファイルを実行するだけ。
MetabaseがPython製だった時代は、セットアップに多くの依存関係があり課題であったがClojure製になってからは、すごく簡単になったそうです。

```bash
$ java -jar metabase.jar
```

### Superset
Metabaseと比較すると、面倒くさい。Python製の辛みであり、依存関係が複雑。PIPインストール時にコンパイルが必要になるためGCCなども必要。

またアプリケーションサーバに`Gunicorn`を利用。

以下例ではキャッシュサーバは省略しているが、本来ならRedisなどのキャッシュサーバも立ち上げないといけないし、Superset自体が利用するDBもSQLiteではなくMySQLとかにすべきかもしれない。

```bash
# 各種依存LIBを導入し
$ apt install -y gcc build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev

# Pipで依存ライブラリを導入し
$ pip3 install apache-superset gevent Pillow↵

# 利用するDBに応じて、依存ライブラリをさらに導入し
$ apt install default-libmysqlclient-dev
$ pip3 install mysqlclient

# SupersetのDB準備
$ superset db upgrade
$ superset fab create-admin --username $ADMIN_NAME\
                            --firstname $ADMIN_FIRSTNAME\
                            --lastname $ADMIN_LASTNAME\
                            --email $ADMIN_EMAIL\
                            --password $ADMIN_PASSWORD
$ superset init

# WSGIアプリケーションサーバでSuperset起動
$ gunicorn -w 4\
           -k gevent\
           -b 0.0.0.0:8088\
           "superset.app:create_app()"
```

### Kibana
Node.js含め依存が含まれて配布されているので比較的らくちん。(`$KIBANA_HOME`はTAR展開後のディレクトリ）

```bash
# 設定ファイル編集して、接続するElasticsearchを記述する
$ vi $KIBANA_HOME/config/kibana.yaml

# 起動する
$ $KIBANA_HOME/bin/kibana
```

## 対応データソース
|Metabase|Superset|Kibana|
|:------:|:------:|:----:|
|◎       | 〇      | ×    |

`Kibana`は実質`Elasticsearch`専用。`Metabase`,`Superset`ともに多数のデータソースに対応。
`Superset`はデータソースに応じたドライバーライブラリをいれないといけないが、`Metabse`は同梱されている様で扱いやすい。

また、`Metabase`の方が設定も簡単。

## 機能性
|Metabase|Superset|Kibana|
|:------:|:------:|:----:|
|◎       | 〇      | 〇   |
チャート作成、クエリビルダ、ダッシュボードなどは、それぞれ持っている。
それぞれ特徴のある機能があるが、Metabaseがもっとも使いやすそう。

KibanaはOSS版の機能は限定的でユーザ管理機能がないのがやや不満。
ただし、OSSではないがベーシック版（無償版）ならKibanaが機能面では頭一つ抜きん出ていると思う。

### Metabase
- 自動探索機能
    - ある程度自動でチャートなどを作成する。（が、大抵目的と合致しない）
- ダッシュボード埋込機能（iframe/サーバー）
    - **サーバーサイドへの埋込**にも対応している！これはかなりいい！またこのときはAGPLに該当しないライセンスになる。（ただし、`Powered By Metabase`という文字が入る）
    - 商用版を購入すれば、この制限はなくなる模様。
- パルスというメールやSlackへの通知機能

### Superset
- CSVアップロード機能
- 作れるチャートの種類は多い
- チャート埋込機能（iframe）
- かなり細かなロールと権限設定機能（細かすぎて使いにくそうでもあるが）

### Kibana

- OSS版、ベーシック版（無償版）、有償版と種類がある。OSS版の機能は限定的、ベーシック版の機能はかなり豊富。
- OSS版
    - チャート作成、ダッシュボード作成、データ探索の基本機能
    - ユーザ管理機能はない模様
    - ダッシュボード埋込機能（iframe）
- ベーシック版（無償版）
    - かなり機能豊富。
    - Canvasというかなりカスタマイズ可能なダッシュボードのコンポーネント
    - Lensというより直感的なチャート作成GUI
    - アラート機能
    - 若干、ごちゃついてて機能が分かりづらいかも。

ちなみに、有償版には「機械学習」や「異常検知」機能などがついてくる。

## ビジュアライゼーション
例のタイタニックのデータで積み上げヒストグラムを作ってみる。

|項目|Metabase|Superset|Kibana|
|:---|:------:|:------:|:----:|
|GUI |◯       | △      | ◎    |
|自由度|◯      |◯       | △    |

### Metabase

- 積み上げヒストグラムはGUIで簡単にできる。
- ビンの数が直接指定できなかった。（だし直接SQLを書けばできる）

![Screenshot from 2020-11-17 22-54-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/9ef2b56c-90cf-55b5-68ff-f1c6ccf2f224.png)

### Superset
- GUIでは積み上げヒストグラムができなかった。（積み上げバーチャートは可能）
- 積み上げバーチャートを利用して、直接SQLを書けばできる。

![Screenshot from 2020-11-17 23-29-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/18165d71-787c-66fc-87be-a7e7fca0ec15.png)


### Kibana
- GUIで積み上げヒストグラムは簡単にできる。
- ビンの数なども設定できる。
- KQL(Kibanaのクエリ言語）で複雑なことができるのかはちょっと不明。
    - KQLとか言われても学習コスト高い（覚える気になれない）

※画面はベーシック版です。機能的には同じダッシュボードですが、OSS版は日本語メニューになっていません。（日本語文字が扱えないのではなく、ローカライズされていない）
![Screenshot from 2020-11-17 23-39-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/4b0a697f-e965-53ba-f683-d63393d60d0c.png)

## ダッシュボード

|Metabase|Superset|Kibana|
|:------:|:------:|:----:|
|◯       | ◯      | ◯    |

ダッシュボードはあまり差異がない。あえて比較するならKibanaの方が機能は豊富と思われる

### Metabase
![Screenshot from 2020-11-17 23-47-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/2d6b27cd-d0f8-7cd4-81a9-5d71cf64924c.png)

### Superset
![Screenshot from 2020-11-17 23-47-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/0715e69e-3b10-1f9a-4a64-10dcde241c9c.png)

### Kibana
※画面はベーシック版です。機能的には同じダッシュボードですが、OSS版は日本語メニューになっていません。（日本語文字が扱えないのではなく、ローカライズされていない）

![Screenshot from 2020-11-17 23-52-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/47c4665d-3e35-0d31-f1b4-9bec7fa087cc.png)


## 総論
どれを使っても、概ねチャート作成やダッシュボード作成は可能。

### Metabase

ライセンスさえ許容できるならMetabaseが使いやすくてイイ。
自身のアプリにチャートを組み入れたり、顧客へ提供する場合などはライセンスが問題になるかもしれない。
ただし、チャートやダッシュボードの埋込に関してはAGPL対象外の別ライセンスになっているため、「Metabase提供」文言含め改変しなければ自身のアプリへの組込利用はできる模様。

- Pros
    - UIが優れている。
    - セットアップが簡単
    - 使いやすい。
    - 日本語化されている
- Cons
    - ライセンスがAGPL


### Apache Superset

地図系のチャートなんかはSupersetが豊富。Metabaseが対応していないデータソースがある場合などは選択肢に入るかもしれない。

- Pros
    - チャートの種類が豊富
    - ライセンスがApache
- Cons
    - セットアップがやや難解
    - 日本語化が中途半端

### Kibana（OSS版）

分析データがRDBに適しておらず、Elasticsearchを使った方が良い場合など。（テキストデータを分析したいなど）

- Pros
    - セットアップが簡単
    - ライセンスがApache
    - チャートが豊富
- Cons
    - 日本語化がされていない
    - ユーザ管理機能がない
    - Elasticsearch専用


## おまけ
Supersetのダッシュボードはiframeを配置できるので、以下のように３つのBIツールのチャートを組み合わせたダッシュボードが作れたりする。
左から、Metabase、Superset、Kibana。（グラフの形が違うのはご愛嬌です。MySQLにデータ重複して突っ込んでしまったからです。）

![Screenshot from 2020-11-18 22-32-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116285/ccd5ec4b-1953-e84a-3db3-5bc4ef20714e.png)