supersetをシュッと起動できるDockerfile(認証方式をGoogle API OAuth2に変更)をつくってみた、あと触ってみた所感など
ダッシュボードツールのsupersetをシュッと起動できるDockerfileを作りました。といってもsupersetのDockerfileはgithub.comに見かけるので認証方式をGoogle API OAuth2.0に変更したDockerfileを作りました。あとsupersetを触ってみての感想など導入に向けての所感をまとめたエントリです。
認証方式をOAuthに変更する方法
supersetは認証方式を変更できます。チームに最適な認証方式を選択できます。標準はDBにID/パスワードを登録する方式になっています。これをOAuthに変更する方法をまとめます。
コンテナ内の環境変数 SUPERSET_HOME
にセットしたディレクトリ配下にsuperset_config.py
を置いてsupersetの環境変数を上書きします。次のように認証方式をAUTH_OAUTH
に設定し認証プロバイダの詳細設定を記述します。
|
|
認証方式をAUTH_OAUTH
に設定した状態でsupersetを起動するとログイン画面で認証するサービスにGoogle
が表示されます。
次に認証情報を作成したGoogle Developer ConsoleでリダイレクトURL
をhttp://localhost:8088/oauth-authorized/google
に設定するとGoogle Accountで認証ができます。またGoogle+ Api
からアカウント情報を取得しますのでDeveloper ConsoleでGoogle+ Api
を有効にします。
最後に認証させたいアカウントをfabmaneger
を使って作成します。
1 2 3 4 5 6 7 |
docker exec -it superset \ fabmanager create-admin --app superset \ --username 'Google+ アカウントの表示名(displayName)' \ --firstname '任意の名' \ --lastname '任意の姓' \ --email 'Google アカウントのメールアドレス' \ --password '任意のパスワード' |
Google以外にもTwitterやFacebookなどの認証サービスを追加することができます。
詳しくはgithubのレポジトリに公開していますので合わせて確認できます。
supersetが参照するDBを標準のsqliteからmysqlに変更する
標準ではsupersetが参照するDBはsqliteでOS内の$DATA_DIR
にデータが格納されます。
これだとコンテナを削除するとダッシュボードの登録設定が消えてしまうのでsupersetのコンテナではない外のmysqlコンテナを起動させて参照させました。
Compose化して次のようにSQLALCHEMY_DATABASE_URI
の環境変数を変更しています。
1
|
SQLALCHEMY_DATABASE_URI = 'mysql://root@mysql:3306/app?charset=utf8mb4' |
mysqlのコンテナではマルチバイト文字列も扱えるようにutf8mb4
の文字コードを有効にしています。
supersetアプリが参照するデータベースURLの末尾に?charset=utf8mb4
をつければダッシュボードの名前にマルチバイト文字列が使えるようになります。
Dockerfileの使い方
次のレポジトリのDockerfileでコンテナを起動させるとsupersetが使えるようになります。
superset-demo/superset at master · nsoushi/superset-demo · GitHub
supersetだけを起動したい場合はsuperset-init.sh
内の次の行をコメントアウトしてください。
1
|
SQLALCHEMY_DATABASE_URI = '${SUPERSET_DB_URI}' |
mysqlのコンテナとセットで動かしたい場合はレポジトリのREADMEを参考にdocker-copomseでsupersetとmysqlのコンテナを起動してください。
GitHub - nsoushi/superset-demo: This repository contains demo using Superset. After begging containers, you can try Superset right now.
supersetを触ってみた感想など
最後にsupersetを触ってみた感想をまとめます。
初めてsupersetを触りましたが次のようなダッシュボードを作成することができました。
mysqlが提供するworldデータベースをデータソースにして人口やGNPの数値をグラフ化しました。
- 人口の総数(VisualizationType: BigNumber)
- 大陸ごとの人口総数(VisualizationType: Distribution - Bar Chart)
- 大陸ごとの人口総数(VisualizationType: Distribution - Pie Chart)
- 言語ごとのGNP(VisualizationType: Word Cloud)
- 大陸ごとのGNP(VisualizationType: Treemap)
worldデータベースには時系列のデータがありませんが、時系列のデータがあれば集計条件に取得範囲時間を設定してダッシュボードを定期的に更新して定点観測することもできます。
グラフの作成手順
特にヘルプなどを見なくても直感的にグラフ作成まで進めます。
グラフ作成手順は次のような流れです。
- データベースを登録する
- 登録したデータベースからテーブルを登録する
- テーブルからグラフ化するカラムを登録する
- グラフ化に必要なメトリクスを登録する
- データの総数が必要な場合は
Count(*)
、カラム値の総数が必要な場合(人口の総数)はSum(Population)
などを登録する
- データの総数が必要な場合は
- 登録したテーブルからスライスを登録する
- グラフを選択する
- メトリクスとGroup Byするカラムを組み合わせる
- 例)'Asia',‘Europe'などの大陸ごとに人口総数を出す場合は、メトリクスに
Sum(Population)
を登録してContinent
カラムをGroup Byする - 登録したグラフをダッシュボードへ登録する
柔軟にテーブルを定義できる
柔軟にグラフ化したデータテーブルを定義できます。
- DBにあるテーブルをつかう
- 複数のテーブルをJoinさせた結果をテーブルとしてつかう
SQL Lab
(SQLクエリを実行できる)で実行した結果からダイレクトにグラフ化に進む
ただ、SQL Lab
からダイレクトにグラフ化に進む方法は手元のバージョン(0.17.3)ではエラーとなりIssueとしても登録されていました。
SQL Lab
SQL Labでは作成したクエリを実行できます。
実行したクエリは履歴として残ります。後から再度実行できたり、実行結果から直接グラフを作ることもできます。
クエリを書ける人であればSQL Labでグラフ化したいデータの条件でSQLを作りメトリクスとグラフ作成に進むほうが効率が良さそうです。
機能権限とセキュリティ
Admin, Alpha, Gamma, sql_labなどのロールが用意されていてテーブルの登録権限、スライスの登録権限、SQL Labだけを使える権限などがあります。
http://airbnb.io/superset/security.html
機能権限に加えてユーザの操作ログや各種メニューへのアクセス権限などを設定することも可能です。
ここらへんはBIツールに必要そうな機能をサポートする姿勢が伺えます。
まとめ
- RedashはSQLクエリの作成を起点としてダッシュボードを整える流れに比べて、supersetは予め準備されたデータソースを選択します。次に総数や平均など、どんなメトリクスでグラフを作るかを考えダッシュボードを整えます。データソースの選択からダッシュボード登録まで全て画面UIとして提供されているのでクエリを理解していなくても簡単にグラフを作成できます。
- 必要なデータソースを予め準備するエンジニアと解析する人で役割を分ける運用ができます。解析者はエンジニアが準備してくれたデータソースをもとにメトリクスを作成して長所を活かした役割分担ができます。
- ロールとセキュリティも担保されているので情報の公開範囲に注意しながら運用できます。
- グラフの種類が豊富で定期的にグラフが更新されるダッシュボードが作れるので実行したSQL結果をエクセルに持っていきプレゼンしているような状況であれば利用の検討ができそうです。
コードを公開しています
コード全体はgitbubで確認できます。