インテージテクノスフィア技術ブログ

株式会社インテージテクノスフィアの社員達がシステム開発や仕事に関する技術情報を随時掲載いたします

【Databricks】Dashboard as Code: ソース管理+Lakeview APIによる新時代のAI/BIダッシュボード運用

『このダッシュボード、どれが最新?』──そんなやり取り、まだ続けていますか?
従来のBI運用では、改修履歴やデプロイフローに悩まされることが多く、非効率な作業が当たり前でした。

そこで注目したいのが、Databricks AI/BI ダッシュボードのソース管理機能です。

  1. AI/BI ダッシュボードのソース管理
  2. Gitによるバージョン管理
  3. Lakeview API

この3つの仕組みを使ってどのように運用を変革できるのか、実際のコード例を交えながら解説します。

はじめに

こんにちは、インテージテクノスフィアの本戸です。

Databricksは、データエンジニアリング、データサイエンス、機械学習、BI(ビジネスインテリジェンス)を統合的に扱える、クラウドネイティブなデータ分析プラットフォームです。 ダッシュボード機能も標準で搭載されており、Databricks上にあるテーブルを参照したインタラクティブなダッシュボードを作成・共有できます。 さらに、AIアシスタント「Genie」が統合されており、自然言語によるデータ探索を支援することで、AI/BIの融合を実現しています。

従来のBIツールでは、ダッシュボードの改修履歴を管理するのが難しく、バージョンごとにファイルをコピーしてバックアップを取る、 これが最新ファイルだというものを手動でデプロイする、といった運用面での手間が課題となっていました。 そんな課題に対し、Databricksではダッシュボードを簡単にソース管理する=Dashboard as Codeを実現でき、 変更履歴のトラッキングやGit連携が容易になることで安全な運用フローを構築できます。 この記事では、ダッシュボードのソース管理方法とその応用についてご紹介します。

AI/BIダッシュボード機能を紹介した記事も投稿しています。こちらもぜひご覧ください。 www.intage-ts.com

目次

ダッシュボードのソース管理

Git連携

Gitフォルダ内にダッシュボードを作成もしくは移動するだけで、ダッシュボードがソースコードとして扱われ、そのままコミット等の対象とすることができます。 ダッシュボードの実態は *.lvdash.json と付くJSONファイルとして扱われ、このJSONファイル内にデータセットやページ、各ウィジェットの構成がソースコードで定義されています。

Gitフォルダ
Databricks Git操作画面
GitHub画面

Genieが有効化されている場合はこちらも定義に含まれるので、定義ファイルを用いてデプロイした場合も継続して利用できます。 ただし、指定のSpace IDを持つGenieスペースが必要なので、環境をまたぐ際は注意が必要です。

"genieSpace": {
    "isEnabled": true,
    "overrideId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

定義ファイルの取得方法

ダッシュボードの編集画面から、ケバブメニュー > File actions > Export と進むことで、Gitフォルダを作成せずとも定義ファイルを取得できます。

ダッシュボード画面から定義ファイルをエクスポート

ダッシュボードに対する操作

ダッシュボード内のコンテンツに対しては上記の通りJSONにて定義されていました。一方で、ダッシュボードの公開や権限設定といった外側の構成は管理されません。 これら一つ一つの操作をコード実行する際はLakeview APIが利用できます。

Lakeview API

Databricksが提供するREST APIの内、ダッシュボード関連の操作が可能なLakeview APIというものがあります。 余談ですが、どうやらAI/BIダッシュボードの前身はLakeviewダッシュボードと呼ばれていたそうで、その名残がAPI名にあるようです。おそらく定義ファイルの lvdash はLakeview dashboardを示していると考えられます。

具体的なコードは後述しますが、このAPIを使用することで、ダッシュボードの一覧取得、作成、更新、公開といったことができ、Permission APIと組み合わせて使用することで、ダッシュボードの権限管理も実現できます。 またこれらのAPIは、Databricksワークスペース内からdatabricks.sdkで簡単に使用できます。

ダッシュボード自動作成パイプラインの実現

上記の ダッシュボードのソースコード化 + Lakeview API によって、ファイル読み込み→テーブル化→整形→定形ダッシュボード作成 の一連プロセスの全自動化を達成しました! ダッシュボードをソースコードで扱えるようになったことで、データセット作成部分の参照テーブルをプレイスホルダーとし、 前段で作成されたテーブル名で置換することで、データ毎のダッシュボード自動作成に至りました。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dashboards import Dashboard
from databricks.sdk.service.iam import AccessControlRequest, PermissionLevel

# SDKワークスペースクライアントの初期化
w = WorkspaceClient()

# ダッシュボード定義ファイルの読み込み
with open("./sample_dashboard.lvdash.json", "r", encoding="utf-8") as f:
    dashboard_content = f.read()

# ダッシュボードインスタンスの作成
dashboard = Dashboard(
    display_name="sample_deplyed_dashboard",
    parent_path="/Workspace/xxx/xxx/xxx/",
    warehouse_id="xxxxxxxxxxxxxxxxxx",
    serialized_dashboard=dashboard_content
)

# ダッシュボードの作成
created = w.lakeview.create(dashboard=dashboard)
dashboard_id = created.dashboard_id

# ダッシュボードの公開
w.lakeview.publish(dashboard_id=dashboard_id)

# ダッシュボードの権限設定
w.permissions.set(
    request_object_id=dashboard_id,
    request_object_type="dashboards",
    access_control_list=[
        AccessControlRequest(
            group_name="admins",
            permission_level=PermissionLevel.CAN_MANAGE
        ),
        AccessControlRequest(
            group_name="reader",
            permission_level=PermissionLevel.CAN_RUN
        )
    ]
)

※Lakeview APIがGitフォルダに対応していないのか、検証時にはparent_pathにGitフォルダを指定できなかったため、通常フォルダを指定しました。

まとめ

本記事では、Databricksのダッシュボードのソース管理とLakeview APIについてご紹介しました。 Databricksはクラウドデータプラットフォームの中でもAI機能に強く先進的なプラットフォームとして認知されていますが、 一方でこうした堅実で便利な機能が充実している点も、Databricksの魅力のひとつだと感じました。

今回はダッシュボード周辺を扱いましたが、他にも本当にたくさんの機能が備わっています。 それらを使いこなすことでDatabricksがもつポテンシャルをさらに引き出せるはずですので、 今後も様々な機能を探求していきたいと思います。

参考