2016/12/12

Windowsに頑張ってSupersetをインストールしてSQL Serverに繋いでみた


SupersetはAirbnbが開発しオープンソースにしたデータ可視化ソフトウェアです。
最近では同じジャンルのでre:dashの次だなんて言われていますね。

デモを見ていただければわかると思いますが、可視化表現にかなり力が入っています。
Gallery — Superset's documentation

今回はこいつをインストールして実際に起動したというところまでのお話です。

オフィシャルでも書かれているとおりWindowsはサポートされていません。
公式のインストールドキュメントにWindowsでのセットアップ手順が書かれていたので調整乗ってインストールしましたが、ちゃんとした環境で動かしたいのであればLinuxやMacOS上で動作させることをおすすめします。

インストールの手順はオフィシャルのドキュメントのとおりです。

 Superset's documentation
 http://airbnb.io/superset/installation.html#getting-started

事前にWindows版Python3.5をインストールしておきます。

 Python Releases for Windows
 https://www.python.org/downloads/windows/

Pythonのインストールができたら今後Pipをインストールし事前の準備は完了です。
pipのインストールをしてvirtualenvのセットアップが完了したら今度は実際にsupersetのインストールにかかるわけですが、そのままインストールを実行しても失敗します。
C++のBuild ToolのインストールとSASLのためのモジュールが足りないと怒られます。

 Visual C++ Build Tools
 http://landinghub.visualstudio.com/visual-cpp-build-tools

まずはVC++のBuild Toolsのインストールを行い、次に、WindowsのPythonで使えるSASLのモジュールをインストールです。

 Unofficial Windows Binaries for Python Extension Packages
 http://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl

実行するPythonのバージョンとOSの環境に合わせたwhlファイルをダウンロードし、ローカルでインストールします。

pip install sasl‑0.2.1‑cp35‑cp35m‑win_amd64.whl
 ※今回はPython3.5の64bitWindows環境向けのファイルをダウンロードし実行


この状態で
pip install superset
を実行するとおそらく問題なくインストールが完了するはず。
それでもエラーが出る場合にはエラー文言を読みつつ対応してください。


インストールが完了した後、supersetコマンドは直接実行してもそんなコマンドないと怒られちゃいますので、python superset XXで実行してください。

Windowsの場合普通にrunserverを実行してもまだモジュールがないと言われ実行できません。
これらに対応する方法がよくわからなかったので、-d オプションを付けDeveloperモードで動かします。この状態ならなんとか動作確認できました。
 この場合にはlocalhost以外からのアクセスができないのであしからず。


なんとか起動している状態で、ブラウザを起動しアクセスしてみます。
http://localhost:8088
に接続すると延々とローディング画面が続きます。

これを無視して右上の「Login」からセットアップ中に設定したadminで入ってみます。
無事ログインできるとダッシュボード一覧が表示されます。
最初にログインした時には3つのサンプルが表示されているかと。

一番上に表示した画像はこのサンプルの中のBirthsと言うものです。
Re:dasのどことなく垢抜けない感じとは打って変わって見て分かる通り非常にグラフィカルでインタラクティブな表示になっています。


メインのお題となるSQL Serverとの接続です。
事前に2つPythonのモジュールを追加しておく必要があります。

pip install pymssql
pip install pyodbc

その後データベースの設定画面でSQLAlchemy URIの項目にデータベースを指定するわけです。

mssql+pymssql://sa:XXXXXXXXXX@localhost/dbname

XXXの部分にはsaに対応するパスワードを入力してください。
今回はSQL Serverが動いている同じサーバ上でSupersetを動かしているのでlocalhost/dbnameという指定を指定としていますが、実際には各々の環境に合わせて書き換えてください。

登録前にTest Connectionで接続確認できます。
接続確認できましたら今度はSaveでデータベースを登録します。

データベースを登録するだけでは使えず、今後はテーブルの登録も行う必要があります。
(もっといい方法があるかもしれないですが)テーブルは1つづつしか登録できないような挙動です。普通リレーションを組んでいるのでなんとも面倒くさく、それでいて使いにくい。



実際に画面を作成するためにはSlicesを作りDashboartdsに設置していくイメージ。この辺はRe:dashと同じ感じですね。
あとは、画面上に表示されるChart Typeを選択してサイドメニューのパラメータを弄るだけで確かに格好いい表示ができます。ただ、WordCloudのような非常に複雑なものチャートを選択するとパラメータ変更する前に開いているブラウザが落ちるという挙動が気になります。

また、複数のテーブルで計算した結果をグラフィカルに出力するにはどうすればいいのかイマイチ分からないです。
SQL Labの項目からSQLを手入力することはできるのですが、この画面で投入したSQLはどんなに簡単なものでも完了したことはありませんでした。

Re:dashは確かにグラフィカルな表示には向いていませんが、SQLの結果を可視化できるという意味ではシンプルでよかったのですが、SupersetはSuperset上でSQLを実行するのではなく事前に一時テーブルなどに整形結果を格納しておく必要がありそうです。
そもそも、SQL入力しても結果が帰ってこないのがWindows版の問題点という可能性もありえます。。。


最も自分の手元にある環境がWindows端末しかなかったので今回はWindows環境にインストールしましたが、素直にサーバ立ててその上にインストールすることをおすすめします。
Re:dashにしろSupersetにしろきちんと使い込まないとよし悪しが見えてこないと思います。当分はこれで試行錯誤したいと思います;-p