AI/BI GenieとMCPを用いたDatabricksシステムテーブルのクエリー

[Querying Databricks System Tables with Genie API and MCP \| Medium](https://medium.com/@AI-on-Databricks/querying-databricks-system-tables-using-ai-bi-genie-and-mcp-fd79dfbcf9e8)の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*e3la_9NKRhA1k_qy70Tstw.png)

著者: Jai Behl, Sr. Solutions Architect @ Databricks

リポジトリ: https://github.com/jaibehl97/genie_mcp/tree/main

そして、[デモ](https://www.linkedin.com/feed/update/urn:li:activity:7316209426925846535/)

この記事では、**Model Context Protocol (MCP)** と公式のDatabricks SDKを用いて構築されたサーバーと、[AI/BI Genie](https://www.databricks.com/jp/blog/genie-conversation-apis-public-preview) APIを用いて、Databricksシステムテーブルににクエリーを行うためのパワフルかつ自然言語のインタフェースの構築方法を探索します。このアプローチがどのようにデータとのやり取りをシンプルにし、洗練された観測可能性のワークフローを実現し、Claude Desktopのようなクライエントにシームレスに接続するのかをデモンストレーションします。

# イントロダクション: GenieとMCPを用いたデータとの会話

Databricks AI/BI Genieは、自然言語を用いたデータとのやり取りを行う直感的な手段を提供し、質問をSQLクエリーに変換します。Anthropicによるオープン標準である**Model Context Protocol (MCP)** によって、LLMやアプリケーションが活用できる「ツール」としてGenieのような機能をセキュアに公開することができます。

GenieとMCPを組み合わせることで、ユーザーはDatabricksにあるデータに関する複雑な質問を尋ねることができます - この場合はシステムテーブル - をSQLを記述することなしにシンプルな英語で質問することができます。このプロジェクトでは、ブリッジとして動作するMCPサーバーを実装し、Claude Desktopのような任意のMPC互換のクライアントとGenieのパワーと接続できるようにします。

# パワーユースケース: システムテーブルによる観測可能性

Genieは、Unity Catalogに登録されている任意のデータにクエリーできますが、**システムテーブル**に適用した際にこのインテグレーションが際立ちます。システムテーブルは、レイクハウスの観測可能性の基盤となり、Databricks利用に関する重要な側面に関するオペレーションに関するインテリジェンスを提供します。クイックにスタートにするには、[Databricksのシステムテーブル](https://www.databricks.com/resources/demos/tutorials/governance/system-tables)のデモを活用し、Genieスペースに接続することができます。

Genie+MCPサーバーを用いることで、ユーザーや自動化システムが以下のような質問を行えるようになります:

1. **コンサンプションの監視と課金の予測:**
    - 「先月のワークスペースごとのDBU消費は？」
    - 「過去30日におけるジョブクラスターの日次コストのトレンドを見せてください」
    - 「前四半期に基づいて、次の月のDBU使用量を予測してください」
1. **データアクセスの監視:**
    - 「昨日誰がcustomer_piiテーブルにアクセスしましたか」
    - 「先週、finance.transactionsスキーマに対して実行されたすべてのクエリーを見せてください」
    - 「prod_catalogに対するSELECTを持つプリンシパルは？」
1. **プラットフォーム使用量の監視:**
    - 「ノートブックで最も何が頻繁に実行されているのか？」
    - 「過去24時間で最も遅いクエリーを見せてください」
    - 「先週最もクエリーを実行したユーザーは？」

この自然言語のインタフェースは、システムテーブルにロックされている重要なオペレーションのデータへのアクセスを民主化し、チームによるコストの監視、セキュリティの保証、プラットフォーム資料量の最適化を可能にします。

# アーキテクチャの概要: サーバーとクライアント

このシステムは2つの主要なパーツから構成されます:

1. **MCP Server (server.py):** このPythonスクリプト(genie_api/ディレクトリ内)は、このインテグレーションのコアです。特定のGenie APIの機能をMCPツールとして公開するために、DatabricksワークスペースとmcpライブラリのFastMCPを接続するために、databricks-sdkを使用します。Genie APIとの直接のインタラクションに対応します。
1. **MCP Client (Claude Desktopなど):** カスタムのPythonクライアントではなく、標準的なMCP互換のクライアントアプリケーションを用いて接続します。Claude Desktopは極上な例であり、ユーザーはチャットインタフェースを通じてMCPサーバーのツールとやり取りを行うことができます。

MCPは、クライアント(Claude Desktop)とサーバー(server.py)間で、標準入出力(stdio)のような通信を通じたコミュニケーションに対応します。

# Databricksによるセキュアな認証

MCPサーバーをDatabricksにセキュアに接続することは重要です。(genie_api/内の)auth.pyがこれを管理します:

- databricks-sdkのWorkspaceClientを活用します。
- 環境関数(python-dotenvを用いた.envファイルなど)から資格情報(ホスト、トークン、クライアントID/シークレット)がロードされ、コードからシークレットを分離します。
- 標準的なDatabricks認証方法(PAT、OAuth、設定ファイル)をサポート。
- 使用前にクライアントが初期化されることを確実にするチェック機能も含みます。

# サーバサイドのロジック: MCPツール経由でのGenieの公開

server.pyスクリプトがMCPサーバーを実装します:

1. **初期化:** FastMCPサーバーインスタンスをセットアップします。
1. **Databricksクライアント:** auth.pyを通じてWorkspaceClientへの認証を初期化します。
1. **ツール定義:**　Databricks Genie APIコールをMCPツールにラップするために、`@mcp.tool()`デコレーターを使用します。これによって、プロトコルを通じてGenie関数を呼び出せるようになります。公開されるキーとなるツールには以下が含まれます:

- *start_conversation*: 新規Genie会話を開始します。
- *create_message*: フォローアップのメッセージを送信します。
- *get_message*: メッセージのステータスとコンテンツを取得します。
- *get_space*: Genieスペースの詳細を取得します。
- *get_message_attachment_query_result*: Genieがクエリーを実行した際に結果を取得します。
- *execute_message_attachment_query*: アタッチメントからクエリーを再実行します。
- *generate_download_full_query_result*: 完全な結果のダウンロードを起動します。
- *poll_message_until_complete*: メッセージが最終的な状態に到達するのを待ちます。

`server.py`のそれぞれのツールの関数は、MCPリクエストを適切なDatabricks SDKの呼び出しに変換し、レスポンスをMCPフォーマットに整形します。

# MCPクライアント(Claudeデスクトップなど)による接続

Genieツールを使用するには、実行中のserver.pyスクリプトにMCPクライアントを接続します。以下では、[MCP Quickstart for Claude Desktop Users](https://modelcontextprotocol.io/quickstart/user)の原則に従い、Claude Desktopでのセットアップ方法を示します:

1. **Claude Desktopのインストール:** インストールしていない場合にはダウンロードしてインストールします。
1. **設定ファイルの特定/作成:** Claude Desktopの設定 -> 開発者 -> 設定の編集を開きます。これによって、`claude_desktop_config.json`ファイルを開きます。
1. **サーバーの設定:** Claudeにserver.pyスクリプトの実行方法を伝えるために、JSONファイルのmcpServersオブジェクトにエントリーを追加します。

    ```json
    {
      "mcpServers": {
        "databricks-genie": {
          "command": "python", // Or python3, or the full path to your python executable
          "args": [
            "/path/to/your/project/genie_api/server.py" // Use the absolute path
          ],
          "env": {
             // Optional: If server.py relies on env vars not globally set, 
             // define them here. Assumes .env file is in the server's directory.
             // e.g., "DATABRICKS_HOST": "https://your-workspace.cloud.databricks.com" 
          },
          "workingDirectory": "/path/to/your/project/genie_api/" // Absolute path to the server's directory
        }
        // ... potentially other servers ...
      }
    }
    ```

    */path/to/your/project/* をあなたのプロジェクトディレクトリの実際の絶対パスで置き換えます。

    - コマンドがClaude Desktopでアクセスできる適切なPythonインタプリタをポイントするようにします。
    - サーバーが`auth.py`や`.env`ファイルを特定できるように`workingDirectory`を設定します。
    - サーバープロセスがDatabricks資格情報にアクセスできるようにします(workingDirectoryの`.env`ファイルを通じてか、環境変数にグローバルに設定するかなど)。

1. **Claude Desktopの再起動:** アプリケーションを閉じて再度開きます。
1. **検証:** チャットの入力バーのハンマーのアイコン(ツール)をクリックします。databricks-genieサーバーの下にserver.pyで定義したツール(start_conversation、create_messageなど)が一覧されていることを確認できるはずです。

これで、Claudeとチャットして、Databricksシステムテーブル(あるいは、あなたが設定したGenieスペースの他のデータ)に関する質問を行うことができます。ClaudeはGenie APIとやり取りをするために、あなたのローカルのMCPサーバーで提供されるツールを使うことができます。

# MCPサーバーにおけるセキュリティの検討事項

Model Context Protocolはパワフルなインテグレーションを可能にしますが、[MCP Security Specification](https://modelcontextprotocol.io/specification/2025-03-26/index)で説明されているように、これには注意深いセキュリティの検討事項が必要となります。

- **ユーザーのコンテンツ:** 特にツールはデータにアクセスし、アクションを実行することができるので、Claude Desktopのようなクライアントは、MCPサーバーによって意提供されるすべてのツールを実行する前にユーザーから明示的な合意を得る**必要があります**。Claudeでツールを使う際に同意を得るプロンプトを見ることになります。
- **サーバーに対する信頼:** ここで説明する環境では、あなたのユーザーアカウントの権限とDatabricksの資格情報を用いて、あなたのマシンローカルでserver.pyを実行します。これは、開発や個人利用に適しています。
- **プロダクションのデプロイメント:** MCPサーバーをより広範な用途で実行するには、適切なデプロイメント戦略を必要とします。**このローカルサーバーを単純にネットワークに公開しないでください。** 適切なホスティング環境、ネットワークコントロール、複数のユーザーやシステムによってアクセスする必要がある場合には、*MCPサーバー自身上の*認証/承認レイヤーを決定するために、セキュリティやDevOpsチームと作業してください。このサーバーは、(環境変数やサービスプリンシパルで設定されたインスタンスプロファイルを用いて)必要なDatabricksの資格情報にセキュアにアクセスできる環境で実行する必要があります。

# ベストプラクティスの振り返り

- **Genieスペースのセットアップ:** 最適なGenieのパフォーマンスを得るために、Unity Catalogでデータをキュレーションし、リレーションシップを定義し、説明文を追加します。
- **システムテーブルの知識:** クエリーしようとしている、システムテーブルのスキーマに慣れ親しみます。
- **エラーハンドリング:** サーバーは基本的なエラーの整形を行います。クライアントは潜在的な失敗を適切に取り扱うべきです。
- **認証:** プロダクションではOAuthサービスプリンシパルのようなセキュアな手法を用います。
- **MCPツールの粒度:** server.pyで行っているように、ツールをフォーカスさせましょう。

# まとめ

Databricks AI/BI GenieとModel Context Protocolを組み合わせることで、あなたのDatabricksのデータとの自然言語のインタフェースを作成することができ、特にシステムテーブルを用いた際の観測可能性のメリットを享受することができます。フォーカスされたMCPサーバー(server.py)を実装し、Claude Desktopのような標準的なクライアントと接続することで、APIコールやSQL生成の複雑性を抽象化し、オペレーションデータとユーザーがシンプルに「会話」できるようになります。ローカルでの開発を超える際には特に、MCPガイドラインに従い、堅牢なホスティング戦略を確立することで、セキュリティの優先度を高めることを忘れないでください。このアーキテクチャは、企業はデータ分析で高度なAI能力を活用でき、Databricksエコシステムにおけるコントロールとセキュリティを維持することができます

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)