0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

高機能BIツール Superset を社内用にチューニングしてみた!

Posted at

こんにちは。
Toggle AdventCalendarの23日目の記事です。

はじめに

社内の検証用にBIツールのApache Supersetを立ち上げてみました。

Apache Supersetは、オープンソースのデータ探索・可視化プラットフォームです。
単なるグラフ作成ツールにとどまらず、有償のBIツールを代替できるほど強力な機能を備えています。
元々はAirbnb でOSSとして開発されていましたが、その後、Apache財団の管理となりました。

きっかけ

自社SaaSの利用がここ1年で急速に伸び、データ可視化のニーズが非常に高まってました。

元々はMetabaseを利用していましたが、ビジネスメンバーから「こんな指標が見てみたい」とか「このデータに列を追加してほしい」みたいなニーズをいただくことが増えました。
また地図ベースのアプリケーションのため、地図でデータを可視化したいシーンもありました。

そんな状況だったので、新しくBIツールを開拓しつつ社内で検証を回してみることにしました。

気軽に検証を回す

弊社では先日、ひとり1台 NVIDIA DGX Sparkが配布されました。
参考: https://www.itmedia.co.jp/aiplus/articles/2509/03/news125.html

ローカルLLMの構築や、ファインチューニング、ディープラーニングなど、様々な利用用途はありましたが、Ubuntuが内蔵されているので、単にサーバーとしても気軽に使えるのでは?と思いました。

そこで、DGX Sparkで環境を立ち上げ、それを社内で展開して見てもらおうと考えました!

なぜSuperset か?

シンプルに使ってみたかったからです。
OSS で高性能なんてワクワクします。

Supersetのメリット

ざっくり下記のような機能を携えています。

  • ノーコード・チャートビルダー
    SQLが書けなくても、直感的なUIだけで素早くチャートを作成できる
  • 強力なSQLエディタ
    データサイエンティストやエンジニア向けの、高機能なブラウザベースSQL IDEを搭載。複雑なデータ加工も自由自在
  • 軽量なセマンティックレイヤー
    メトリクスやカスタム次元を定義し、チーム全体で共通の指標を使い回すことができる
  • 美しいビジュアライゼーション
    シンプルな棒グラフから、高度な地理空間データの可視化まで、Apache EChartsをベースとした多種多様なチャートが用意されている
  • エンタープライズ品質のセキュリティ
    柔軟な権限管理と、既存の認証システム(OAuth, LDAP等)との連携が可能
  • クラウドネイティブな設計
    小規模な検証から、膨大なトラフィックを捌く大規模環境まで、スケールすることを前提に設計されている

また、ほとんどのDBやデータエンジンと接続できる便利BIツールです。

デメリット

デプロイが面倒なことかなと思います。
k8s で構成されているので、知識を要します。
あと、大規模で使うなら良いですが、社内レベルであれば割とオーバーな構成であるとも思います。

さっそく検証してみる

ローカルで検証するのはものすごく簡単です。

公式ドキュメント に従って、リポジトリをクローンして、Docker compose up するだけです。

  1. リポジトリクローン
    git clone https://github.com/apache/superset
    
  2. 立ち上げる
    # Enter the repository you just cloned
    $ cd superset
    
    # Set the repo to the state associated with the latest official version
    $ git checkout tags/5.0.0
    
    # Fire up Superset using Docker Compose
    $ docker compose -f docker-compose-image-tag.yml up
    

が、さすがに問題ある

ただ、立ち上げるだけだとユーザー名 and パスワードログインとなります。
社内で利用するならOauthでのログインがいいですね。

あと、言語も英語になっています。
こちらも日本語のほうがベターです。

このあたりを2点いじっていきます。

1. Oauth ログイン

docker/pythonpath_dev/superset_config.py を編集します。
ユーザー登録するのも面倒なので、ログインをしてみて、ユーザーが存在しなければユーザーを登録するようにします。

# Authentication Configuration
# AUTH_DB: Email/パスワード認証(デフォルト)
# AUTH_OAUTH: OAuth認証(Google OAuthなど)
# AUTH_TYPE = AUTH_OAUTH に変更するとGoogle OAuthが有効になります
AUTH_TYPE = AUTH_OAUTH

# Google OAuth Configuration
# Google OAuthを使用する場合は、上記のAUTH_TYPEをAUTH_OAUTHに変更してください
# Set GOOGLE_KEY and GOOGLE_SECRET environment variables
GOOGLE_KEY = os.getenv("GOOGLE_KEY")
GOOGLE_SECRET = os.getenv("GOOGLE_SECRET")

# Only configure OAuth if AUTH_TYPE is AUTH_OAUTH and credentials are provided
if AUTH_TYPE == AUTH_OAUTH and GOOGLE_KEY and GOOGLE_SECRET:
    OAUTH_PROVIDERS = [
        {
            "name": "google",
            "icon": "fa-google",
            "token_key": "access_token",
            "remote_app": {
                "client_id": GOOGLE_KEY,
                "client_secret": GOOGLE_SECRET,
                "api_base_url": "https://www.googleapis.com/oauth2/v2/",
                "client_kwargs": {"scope": "email profile"},
                "request_token_url": None,
                "access_token_url": "https://accounts.google.com/o/oauth2/token",
                "authorize_url": "https://accounts.google.com/o/oauth2/auth",
                "authorize_params": {"hd": os.getenv("AUTH_DOMAIN", "")},
            },
        }
    ]

    # 管理者として認識されたユーザーに割り当てられるSupersetのロール名
    AUTH_ROLE_ADMIN = "Admin"
    # 未認証/パブリックユーザーに割り当てられるロール名
    AUTH_ROLE_PUBLIC = "Public"

    # Google OAuthで認証されたユーザーが、Supersetに自動的にユーザー登録される
    AUTH_USER_REGISTRATION = True

    # The default user self registration role
    # Change this to "Admin" if you want new users to have admin role
    # Gammaロールを付与することで、新規ユーザーは基本的な権限を持つが、Datasetへのアクセスは個別に付与が必要
    AUTH_USER_REGISTRATION_ROLE = "Gamma"

    # If running behind a load balancer or reverse proxy, enable this
    # リバースプロキシ経由の場合や、リダイレクトURIの問題がある場合は有効化
    ENABLE_PROXY_FIX = True

自動ログイン & ユーザー登録をしているのは下記のコードです

# Google OAuthで認証されたユーザーが、Supersetに自動的にユーザー登録される
AUTH_USER_REGISTRATION = True

↑だけだとユーザーがログインしても何も見えないので、ロールを付与します。

AUTH_USER_REGISTRATION_ROLE = "Gamma"

ロールはお好みですが、下記のような分かれ方になっています。

ロール名 説明・主な権限 データソースの追加・変更 ユーザー管理 (権限付与等)
Admin 管理者: 全ての権限を持ちます。他ユーザーへの権限付与や、他人が作成したスライス・ダッシュボードの変更も可能です。 ◯ 可能 ◯ 可能
Alpha 編集者: 全てのデータソースにアクセスでき、データソースの追加・変更も可能です。ただし、他人の権限管理はできません。 ◯ 可能 × 不可
Gamma 閲覧者: 権限が制限されています。個別に付与されたデータソースのみ閲覧・利用可能です。データソースの追加はできません。 × 不可 × 不可
sql_lab SQL Lab利用: SQL Labへのアクセスを許可します。AlphaやGammaユーザーがSQL Labを使う際に組み合わせて付与します。 - -
Public 公開用: ログインしていないユーザーに特定の機能(ダッシュボードの閲覧など)を許可するために使用します。 × 不可 × 不可

Google側の設定

Google Cloud Platform側はこんな感じで設定します

image.png

さて、設定が完了したら docker を立ち上げ直してみましょう。
docker を立ち上げ直すと、以下のようにログイン画面がGoogle ログインに変わりました :clap:

image.png

2. 日本語化

バージョンが5系だからかはわかりませんが、デフォルトでは言語選択欄が出ません。
なので、こちらも superset_config.py をいじっていきます。

BABEL_DEFAULT_LOCALE = "ja"
LANGUAGES = {
    "ja": {"flag": "jp", "name": "Japanese"},
    "en": {"flag": "us", "name": "English"},
}

こちらも、Dockerを立ち上げ直してみると、

image.png

言語選択ができるようになりました! 🎉🎉

しかし、日本語は、直訳したかのうような不自然な日本語が多数存在します。
そのままではビジネスメンバーには展開できません....

ここでAIに真価を発揮してもらうことにしました。

日本語ファイルをガッツリいじる

日本語ファイルは下記に格納されています。
superset/translations/ja/LC_MESSAGES/messages.po

このファイルをいじれば日本語も自然になるはず...ですが、日本語ファイルは13000行あります。

image.png

AIの力を借りつつ少しずつ修正していきます。
どこまでやるかはお任せです。

終わったらこの po ファイルをビルドします。

バックエンド

$ pybabel compile -d superset/translations

フロントエンド

$ cd superset-frontend
$ npm run build-translation

確認してみます

image.png

image.png

日本語なども問題ないかと思います。

日本向けにさらにいじる

これまでの対応で、下地は完了かと思いきや、まだ問題がありました。

日本では、あるあるのSHIFT-JIS問題です。
データをダウンロードすると文字化けします...

そこで文字化けしないようにソースコードを直接いじります。

superset/charts/client_processing.py
- query["data"] = buf.getvalue()
+ csv_data = buf.getvalue()
+ # Excel on Shift-JIS based Windows relies on a UTF-8 BOM to detect UTF-8
+ # encoded CSVs, so we inject it here to avoid mojibake when opening files.
+ if not csv_data.startswith("\ufeff"):
+     csv_data = "\ufeff" + csv_data

これでダウンロードしても文字化けしなくなりました。

Supersetはどうか?

高機能なので、使い方を覚えないとなかなか難しい部分も多いですが、権限管理も細かく出来て、組織が大きくなってもスケーリングしやすいのが良いなと思いました。

SQL Labでデータを作ってしまえば、あとはチャートの入れ替えなどスムーズに行えますし、高機能なダッシュボード画面が気に入っています。

フィルターなども設定可能です。
image.png

私が特に気に入っているのは、押したデータが連動してクロスフィルターされる点です。
image.png
image.png

これでユーザー単位の分析なども行いやすくなります。

ここについては社内でも好評です。

まとめ

今回は社内向けにSupersetを立ち上げてみました!
社内では概ね好評です!!!

みなさまも良ければセットアップしてみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?