コンテンツへスキップ
ホーム » Apache Superset開発③

Apache Superset開発③

  • by

前回の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ツールに付加価値をつけたアプリケーションの構築も可能です。