Superset
Airbnb によるいわゆる BIツール であるオープンソースの Superset がここ最近、話題になっています。今までは私は Re:dash を主に用いてきましたが、比較の意味も含めて Superset に触ってみることにしました。
インストールは非常に簡単
インストールはとても簡単です。公式サイトの記載にしたがえばほぼ何ら問題なくインストールできるでしょう*1。ここでは一つ一つ手順を追って説明していきます。
まっさらな環境からインストールしていく
インストールの手順をわかりやすくするため、まっさらな環境からのインストール方法を見ていきます。ちょうど Docker のコンテナを立てた状態からのインストールでしょうか。実際、今回のインストールは Docker でも試しましたので、どのような環境でも通用すると思います。なお、Ubuntu 16.04 LTS を使っていますので、他の環境の方は適宜読み替えをお願いします。
インストールする前に(重要)
インストールの手順よりも、事前の Python 環境の整備が実は一番重要なところです。Python のバージョンですが、2.X.X でもなく 3.6.0 でもなく、3.5.2 を用いてください(2016/12/25 現在)。2.X.X ですと文字コードの問題が発生し(ここ とか ここ とか)、3.6.0 ですと新しすぎて*2設定ファイルが対応していないためWas unable to import superset Error: module 'xml.etree.ElementTree' has no attribute '_IterParseIterator'
というエラーが出るからです。
現時点では 3.5.2 で問題ありません。pyenv などで環境を作るのがいいと思いますが、今回はそこが主題ではないので省略します。
1. まずは apt-get update / apt-get dist-upgrade
それではまずはおまじないみたいなものとして、既存のアップデートを消化してしまいましょう。
# apt-get update # apt-get dist-upgrade -y
2. 必要なものを一気に入れていく
公式サイトのとおりに一気に入れていきます。
# apt-get install -y build-essential libssl-dev libffi-dev python-dev python-pip libsasl2-dev libldap2-dev
3. setuptools と pip をアップグレードする
これも簡単です。公式サイトの手順にしたがい、先ほどの手順でインストールされた pip を用いて setuptools と pip 自身をアップグレードしましょう。
# pip install --upgrade setuptools pip
4. Superset をインストールする
さあ、Superset をインストールします。とは言ってもpip
して待つだけです*3。簡単すぎて拍子抜けします。
# pip install superset
5. インストールを完了させ、初期化する
あとは公式ドキュメントのとおりに後処理と初期化を済ませます。以下のようにただただコマンドを叩きましょう。最初のコマンドではユーザー名や初期パスワードを聞かれます。
途中でエラーが出た場合*4は Python のバージョンが原因であることなどが考えられます。
# fabmanager create-admin --app superset # superset db upgrade # superset load_examples # superset init
6. サーバを起動して接続する
初期化が終了したならば以下のようにしてサーバを起ち上げましょう。-p
オプションではポート番号、-a
オプションではアドレスを指定します。-a
にはホスト名は指定できないようです。
# superset runserver -p 80 -a 0.0.0.0
サーバが起動したら Webブラウザ で接続してみてください。記事の冒頭のようなログイン画面が表示されればインストール成功です!
その他の注意点
いくつか注意点を書いていきましょう。
とにかく公式ドキュメントを読む
追加の細かい設定や、困った時の対処法などはドキュメントが充実してるので必ず目を通しておきましょう。
Superset のアップグレード方法
Superset をアップグレードするには、これまた公式ページの説明にあるように、以下の手順に沿い、その後サーバを(再)起動しましょう。ちなみにマシンを再起動するなどして、Superset のサーバを再起動するときはinit
してからrunserver
しましょう。
# pip install superset --upgrade # superset db upgrade # superset init
MySQL への接続(準備)
MySQL に接続するためには(他のデータベースでも、それに応じた)準備が必要です。libmysqlclient-dev
とmysqlclient
を次のようにしてインストールします。
# apt-get install -y libmysqlclient-dev # pip install mysqlclient
MySQL への接続(Superset にて)
さらに MySQL への接続には壁があります。接続先をmysql://username:password@hostname:port/hogehoge
のように指定すると、文字コードが不適切で、??????? とハテナが並ぶことになります。こちらの解決方法は以下のように、アドレスの最後に?charset=utf8
というパラメータを付けてあげましょう。
ここ とか ここ に同様の事例が挙がっています。前者は Python 2.7.X の場合だけを修正したんですよねこれ……*5。
不適切な記述をガーッと一気に書いてしまうと接続テストが通らなくなるため、パラメータを付与する前に接続テストが成功することを確認し、その後にパラメータを付与するといいです。
日本語は問題なく使える
Slice や Dashboard の名前には問題なく日本語が使えます。使ったことによる不具合もありません。ガンガン使っていきましょう。
「SQL Lab」でワイルドカードを用いるときは % ではなく %% にする
「SQL Lab」で SELECT 時にワイルドカードを用いる場合、% ではなく %% にしないといけません。これはバグだと思います。ここらへん にその根拠が載っています。
なお、Slice の作成画面における WHERE 句指定のオプションでは % を用いて問題ありません*6。
プロフィールで変更できるのは名前とパスワードだけ
個人個人がプロフィール画面で設定できるのは、現状では名前とパスワードだけです。管理者はメールアドレスも変更できます。写真(画像)についてはメールアドレスと紐付いた Gravatar の画像が用いられているようです。
パスワードを忘れた場合はこれどうするんでしょうか。SQLite3 でユーザ情報は管理しているようですが、そこをいじるのかな。でも平文で保存してるわけないし……ということで興味があればどなたか。
ワードクラウドは遅い
条件にもよるでしょうが、一番見た目が楽しいワードクラウドはとても遅いです。そして日本語では、例えば Twitter の投稿だとすると、一つの投稿全てがワード(とはもはや言えない)クラウドの対象になります。したがって語句を適切に形態素解析などしてからワードクラウドにかけてやる必要があります。
Markdown や HTML で記載できる Slice がある
Slice の中に自由記述ができる Slice が存在し、Markdown あるいは HTML で書けます。当然ながら img タグを使えば画像も挿入できます。
ページャや絞り込みも充実
「表」の Slice では、ページャや絞り込みの機能がチェック一つで実装できます*7。絞り込みは画面に表示しているレコードが対象ですが、テーブル全体で調べたい場合は SQL で書けばいいでしょう。簡易的な用途にはもってこいです。
Dashboard の URI に任意の文字列が付けられる
Dashboard を示す URI は、削除も含めて過去に作った順番に /1 /2 /3 ... のような単純な URI になりがちですが、Superset ではブログの記事のように任意の URI を付与することができます。
データのバックアップ
Superset が扱う全てのデータは、デフォルトで~/.superset/superset.db
という一つのファイルに集まっている(SQLite3)ようで、このファイルさえバックアップや永続化しておけば大丈夫なようです*8。
スマートデバイスには未対応
ログイン画面は対応しているようですが、その他は未対応です。
なお、アプリが展開されている場所は~/.pyenv/versions/3.5.2/lib/python3.5/site-packages/superset
や~/.pyenv/versions/3.5.2/lib/python3.5/site-packages/superset/static/assets
あたりです(pyenvを使った場合)。
Re:dash との比較
さて、いろいろ見てきましたが、Superset が魅力的なプロダクトであることは分かってきたかと思います。基本的に SQL が前提の Re:dash では、結果の内容をあれこれ操作する(プルダウンで絞り込んだり、結果のテキストにリンクをはったり)のは面倒でした。Superset ではそれが簡単に GUI でできてしまうので(下記参照)、非プログラマでも簡単にさわれそうです。詳しくはサンプルの Dashboard を見てください。
また、権限が非常に細かく分類されており役に立ちそうです。Webhook や メール送信 が無いのが残念ですが、そこは BIツール が担うべきではないところなのかな(例えば Fluentd や ChatOps などで行う)とも思っています。Re:dash に比べて Superset は、致命的なバグが少ない印象を(あくまで印象)受けます。
現状ではどちらも面白いプロダクトであることは間違いなく、OSS でこのようなツールが出てきてくれることには感謝しかありません。切磋琢磨してどちらも盛り上がっていけるように、利用者の側からも便利な使い方や応用的な使い方などを情報発信できればと考えています。軽微なバグの場合は気軽にプルリクもしたいです。
興味を持った方はぜひ使ってみてください!