📌

ADKで作るBigQueryのNL2SQLエージェント入門 - INFORMATION_SCHEMAへアクセス🚀

に公開

※本発表は、「#bq_sushi #24 BigQueryとAIで話してみる」の発表内容を基にしております。
https://bq-sushi.connpass.com/event/372861/

はじめに

「自然言語でデータ分析ができたら便利なのに...」

Google Agent Development Kit (ADK)Gemini Enterprise の組み合わせにより、まさにそれが実現できるようになりました。SQLを書けない非エンジニアでも、自然言語でBigQueryに質問し、データ分析ができる時代が到来しました。

本記事では、ADKとBigQueryのファーストパーティツールセットを使った「自然言語でデータ分析」エージェントの構築方法を、実装コードを交えながら解説します。

ADKとAIエージェントの基礎知識

AIエージェントとは?

AIエージェントとは、目標を追求し、タスクを完了させるためにAIを使用して、ユーザーの代わりに行動するソフトウェアシステムです。

ADK (Agent Development Kit) とは?

GoogleがOSSとして開発したAIエージェント構築フレームワークで、以下の特徴があります:

  • Agent Engine: AIエージェントに最適化された実行環境
  • 多言語対応: PythonやJavaで利用可能
  • エコシステム: GCP上で動作し、Gemini Enterpriseと統合

Gemini Enterpriseによるデータ分析の民主化

ADKはGemini Enterpriseと深く統合されており、これにより非エンジニアでも自然言語でデータ分析が可能になります。

従来、データ分析にはSQLの知識が必須でしたが、Gemini Enterpriseの登場により:

  • 自然言語でデータ質問: 「先月の売上トップ10は?」といった質問をそのまま投げかけられます
  • SQL自動生成: エージェントが適切なSQLを生成し、BigQueryで実行します
  • 結果の自動整形: データを分かりやすい形で返答します

つまり、**NL2SQL(Natural Language to SQL)**が誰でも使える技術になりました。

さらに、ADKで作成したカスタムエージェントをAgent Engineにデプロイすることで、**Gemini Enterprise(Agentspace)**から直接呼び出すことができます。これにより、組織全体でカスタマイズされたデータ分析エージェントを共有・利用でき、データドリブンな意思決定を組織全体に広げる大きな一歩となるでしょう。

ADKの技術的進化:INFORMATION_SCHEMAへのアクセス

これまでのNL2SQL

従来のGemini in BigQueryなどでは、自然言語をSQLに変換し、データテーブル(例: salesテーブル、usersテーブル)に対してクエリを実行していました。

-- 従来:データテーブルへの直接クエリ
SELECT product_name, SUM(sales_amount) 
FROM sales 
GROUP BY product_name 
ORDER BY SUM(sales_amount) DESC 
LIMIT 10;

これは主にビジネスデータの分析を目的としたものでした。

ADKの1st Party Tools:メタデータ分析が可能に

一方、ADKのBigQuery ファーストパーティツールセットでは、INFORMATION_SCHEMAを活用した高度なメタデータ分析が可能になりました。

参考:BigQuery と ADK & MCP: 新しいファーストパーティ ツールセット

INFORMATION_SCHEMAとは?

INFORMATION_SCHEMAは「データのためのデータ(メタデータ)」です。以下のような、DB管理者やデータエンジニアの高度な質問にも答えられるようになります。

  • 「プロジェクト内で最もデータ量が多いデータセットは?」
  • 「パーティション化されていない大きなテーブルはどれ?」
  • 「直近1ヶ月でデータ量が増加したデータセットは?」

従来、これらの質問に答えるには以下のような複雑なSQLが必要でした:

-- INFORMATION_SCHEMAを使った複雑なクエリ例
SELECT 
  table_schema,
  table_name,
  ROUND(size_bytes/POW(10,9),2) as size_gb
FROM `project.region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
WHERE table_schema = 'your_dataset'
ORDER BY size_bytes DESC;

ADKの1st Party Toolsを使えば、エージェントがこれらの複雑なクエリを自動生成・実行してくれます。

何が嬉しいのか?

ビジネスデータの分析だけでなく、データ基盤そのものの管理・最適化が自然言語で行えるようになります:

  • コスト最適化:「使われていない巨大なテーブルを見つけて」
  • パフォーマンス改善:「パーティション化すべきテーブルはどれ?」
  • 容量管理:「今月急成長しているデータセットは?」

デモ:INFORMATION_SCHEMAでメタデータを分析

BigQueryの"中の人"(DBA)に質問するように、以下のようなメタデータ分析が自然言語で可能になります:

「プロジェクト内で、最もデータ量の多いデータセットを教えてください」
「直近1ヶ月でデータ量が増えたデータセットは?」
「パーティション化されていない『巨大な』テーブルはどれか?」

SQLだとリージョン指定やINFORMATION_SCHEMAの複数テーブルのJOINが必要になる複雑なクエリも、エージェントが自動で生成・実行してくれます!

実装:ADKでエージェントを構築する

BigQueryファーストパーティツールセット

今回の実装では、GoogleがADK向けに提供しているBigQueryのファーストパーティツールセットを使用しました。このツールセットには、以下の5つのツールが含まれています:

ツール名 機能
list_dataset_ids プロジェクト内のBigQueryデータセットID一覧を取得
get_dataset_info データセットのメタデータを取得
list_table_ids データセット内のテーブルID一覧を取得
get_table_info テーブルのメタデータ(スキーマ、パーティション情報など)を取得
execute_sql BigQueryでSQLクエリを実行し、結果を取得

これらのツールはGoogleが管理する公式ツールであり、認証やエラー処理、BigQueryの機能更新への対応などが自動化されています。

エージェントの実装コード

実際のエージェント実装は非常にシンプルです:

from google.adk.extensions import llm
from google.adk.tools import BigQueryToolset

# BigQueryツールセットの初期化
bigquery_tools = BigQueryToolset(
    project_id="your-project-id",
    # 必要に応じてツールをフィルタリング
    # tool_filter=["list_dataset_ids", "execute_sql"]
)

# エージェントの定義
root_agent = llm.LLMAgent(
    name="data_analytics_agent",
    model="gemini-2.0-flash-exp",
    description="BigQueryのデータを自然言語で分析するエージェント",
    custom_instructions="""
    あなたはBigQueryデータの分析を支援するエージェントです。
    
    タスク:
    1. ユーザーの質問に応じて、適切なデータセットとテーブルを特定
    2. INFORMATION_SCHEMAも活用して、メタデータを分析
    3. 必要なSQLクエリを生成・実行
    4. 結果を分かりやすく説明
    
    注意点:
    - 曖昧な質問には、確認を取ってから実行
    - 大量のデータを扱う場合は、LIMITを適切に設定
    """,
    tools=[bigquery_tools]
)

実行方法

ローカル実行

エージェントを起動するには、以下のコマンドを実行します:

# CLIで対話的に実行
adk run

# Web UIで実行
adk web

Agent Engineへのデプロイ(本番運用)

より実用的な運用では、作成したエージェントをAgent Engineにデプロイし、**Gemini Enterprise(Agentspace)**から呼び出すことができます:

# Agent Engineにデプロイ
adk deploy --project=your-project-id --region=us-central1

デプロイ後は、Gemini Enterpriseの画面から:

  1. カスタムエージェントとして登録
  2. チーム全体で利用可能に
  3. 自然言語でデータ分析を依頼

この構成により、非エンジニアでもGemini Enterpriseのチャット画面から、BigQueryのデータを簡単に分析できるようになります。

エージェントの動作フロー

エージェントは以下のような流れで動作します:

このように、エージェントが自律的にツールを選択・実行し、ユーザーの質問に答えます。

まとめ

ADKとBigQuery 1st Party Toolsの組み合わせにより、以下の2つの大きな進化が実現しました:

1. Gemini Enterpriseによるデータ分析の民主化

  • 非エンジニアでもNL2SQL(自然言語→SQL)が可能に
  • Agent Engineへのデプロイで、組織全体での共有・利用が実現

2. INFORMATION_SCHEMAを活用した高度なメタデータ分析

  • ビジネスデータだけでなく、データ基盤そのものの管理・最適化も可能に
  • DBA/データエンジニアの業務も自然言語で効率化

次のステップ

本記事では「できること」を中心に解説しましたが、実際に現場で運用するには、いくつかの課題と向き合う必要があります。

続編記事では、現場で本当に使えるエージェントにするための3つの壁と解決策について解説予定です。お楽しみに!

参考リンク


この記事が、ADKを使ったデータ分析エージェント構築の第一歩になれば幸いです!
質問やフィードバックがあれば、コメント欄でお気軽にどうぞ 🙌

Discussion