前回のApache Superset開発②ではSupersetの実行手順をご紹介しました。
今回はカスタムメニュー(ページ)を追加してみます。
ページ追加の方法は様々なやり方があります。
今回ご紹介するのは、パターンの1つと考えていただけると幸いです。
■ 前提知識
- docker実行の場合、コンテナ内の/app/pythonpath以下のpythonスクリプトは、supersetから自動的に参照される
- superset_config.pyは独自設定を記述するpythonスクリプト
■ 実装
それでは実装をおこなっていきます。
まず、ローカル上では機能追加分のスクリプトは、~/superset/__pythonpath__以下に配置することにします。
Dockerイメージを作成するタイミングでコンテナ内の/app/pythonpath以下にコピーします。
superset_config.pyに機能追加分を読み出すようなコードを書いて画面反映させる流れです。

①追加ビュークラスの作成
~/superset/__pythonpath__/helloworld.py
from flask_appbuilder import BaseView, expose
from flask import render_template
class HelloWorldView(BaseView):
template_folder = "/app/pythonpath/templates"
route_base = "/helloworld"
default_view = "hello"
menu_icon = "fa-cogs"
menu_label = "カスタムビュー"
@expose("/hello/")
def hello(self):
return self.render_template("helloworld/hello.html", message="hello world")
②ビューテンプレートHTMLの作成
~/superset/__pythonpath__/helloworld/hello.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HelloWorld</title>
</head>
<body>
<div>
{{ message }}
</div>
</body>
</html>
③superset_config.pyへの記述追加
~/superset/__pythonpath__/superset_config.py
# 追加分
from superset.extensions import appbuilder
from helloworld import HelloWorldView
def add_custom_views(app):
appbuilder.add_view(
HelloWorldView,
"Hello World",
category="Extended",
icon="fa-cog"
)
return app
FLASK_APP_MUTATOR = add_custom_views
④Dockerfileにカスタマイズ分をコンテナに反映する記載を追加
~/Dockerfile
# ADDED
COPY __pythonpath__/helloworld.py /app/pythonpath/helloworld.py
COPY __pythonpath__/superset_config.py /app/pythonpath/superset_config.py
COPY __pythonpath__/templates/helloworld/hello.html /app/pythonpath/templates/helloworld/hello.html
ENV FLASK_APP_ADDITIONAL_CONFIG_PATH="/app/pythonpath/superset_config.py"

■ ビルド・実行
ではビルドをしていきます。
$ docker image build -t my-superset:latest .

Supersetを実行します。
$ docker run -t -p 8088:8088 my-superset:latest

起動後、ブラウザでアクセスしてログインしましょう。
画面上部の一番左にExtendedメニューが追加され、その中にHello Worldのアイテムが表示されます。

Hello Worldメニューを選択すると、hello worldの出力のみのページが表示されます。
以上で画面追加の紹介はここまでとなりますが、ビュークラスやテンプレートHTMLを希望に応じた実装をすれば自由にページを追加することができます。
他のBIツールは拡張が難しいものが大半ですが、SupersetであればBIツールに付加価値をつけたアプリケーションの構築も可能です。