PRODUS Inc.

Apache Superset開発③

前回の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のアイテムが表示されます。

Extendedメニュー

メニュー内のHello World

Hello Worldメニューを選択すると、hello worldの出力のみのページが表示されます。

Hello Worldページ表示

hello world出力

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