BigQuery の会話型分析の概要

1. はじめに

データから分析情報を取得するには、多くの場合、かなりの時間と労力、SQL の深い専門知識が必要です。この Codelab では、会話型データ エージェントを通じて AI を活用した分析情報を即座に提供する新しいプラットフォームである BigQuery のエージェント カタログについて説明します。

キュレートされたデータ エージェントを作成することで、単純なテキストから SQL への変換を超えた操作が可能になります。ビジネス コンテキスト、システム指示、検証済みのクエリを使用してエージェントを強化し、精度の高い結果を確保する方法を学びます。最後に、このエージェントを公開して、組織内の他のユーザーが使用できるようにします。

前提条件

  • Google Cloud の基本知識

学習内容

  • BigQuery エージェント カタログの操作方法
  • カスタム エージェントを作成してナレッジソースを定義する方法
  • Gemini を使用してセマンティック メタデータを生成する方法
  • エージェントをガイドするシステム指示と検証済みクエリを追加する方法
  • エージェントを公開して共有する方法

必要なもの

  • Google Cloud アカウントと Google Cloud プロジェクト
  • BigQuery と SQL の基本的な知識
  • ウェブブラウザ(Chrome など)

2. 設定と要件

プロジェクトを選択する

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

3. 始める前に

必要なロールを自分に付与する

プロジェクトの IAM ページに移動し、Gemini データ分析データ エージェント オーナーのロールを自分に付与します。

1d3874c1bc28d81d.png

このロールには、プロジェクト内のすべてのデータ エージェントを作成、編集、共有、削除する権限が付与されます。

必要な API を有効にします。

サイドバーのナビゲーション メニューまたはページ上部の検索メニューを使用して、[BigQuery > エージェント] に移動します。

[Data Analytics API with Gemini を有効にする] をクリックします。

4bc781d1a83ba367.png

Gemini in BigQuery APIGemini for Google Cloud API の両方を有効にします。

71678b9b8900a7a6.png

新しいエージェント ページが表示されます。

23935c00cd4b23c1.png

4. エージェントを作成する

Google トレンドの国際的な一般公開データセットを使用して、最初のデータ エージェントを作成しましょう。このデータセットは、世界的に検索されているキーワードや、過去の検索トレンドとの比較に関する質問をする場合に役立ちます。

まず、エージェントに名前と簡単な説明を付けます。この説明は、他のユーザーがエージェントの目的を理解するためだけに使用されます。

エージェント名

Google Trends Agent

エージェントの説明

Data agent for the Google Trends International Top Terms public dataset

知識ソース

ナレッジソースを追加します。ナレッジ ソースは、エージェントが質問に回答するために使用できる BigQuery テーブル、ビュー、または UDF です。

このデモでは、わかりやすくするために、表を 1 つだけ追加します。ただし、より複雑なデータ シナリオを処理するために、エージェントごとに最大 50 個のナレッジソースを追加できます。

検索ボックスに次の表を入力し、チェックボックスをオンにして、[追加] をクリックします。

bigquery-public-data.google_trends.international_top_terms

8b84bd4c4227637d.png

構造化されたコンテキスト

データ エージェントの精度を高めるには、テーブルと列に構造化されたコンテキストを追加します。[Customise] をクリックします。

f802527c7d72ae63.png

Gemini は、説明の候補を自動的に生成します。[Table description] の横にある [Accept] をクリックします。

cc02e10c0c74bf4b.png

すべての列に説明を適用するには、[すべての行を選択] をオンにして、[提案を承認] をクリックします。

f811458ff0240c.png

ページ下部の [更新] をクリックして変更を保存し、エージェント エディタに戻ります。

手順

[エージェントの指示] ダイアログでは、エージェントがデータソースを解釈してクエリを実行するための追加のガイダンスを指定できます。これには以下が該当します。

  • 類義語: 主なフィールドの代替用語。
  • 主なフィールド: 分析に関して最も重要なフィールド。
  • 除外済みフィールド: データ エージェントが回避するフィールド。
  • フィルタリングとグループ化: エージェントがデータのフィルタリングとグループ化に使用するフィールド。
  • 結合関係: 共通フィールドに基づいて複数のテーブルを結合する方法。

次の手順をコピーして貼り付けます。

### System Instruction

* You are an expert data analyst for the Google Trends International public dataset.
* Always filter on yesterday's refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY).
* If yesterday returns no data, filter on 2 days ago's refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY).
* Default to country-level results (one row per term).
* "Top" queries must deduplicate snapshot rows.
* Only include week or score when the user explicitly asks for trends over time.
* This is an international dataset and does not include any data for the United States.

### Additional Descriptions

#### 1. Core model:

* refresh_date selects the daily Top-25 term set.
* week + score are historical weekly values attached to those terms.
* Filtering week does not change which terms appear.

#### 2. Deduplication rule (critical):

* Snapshot rows repeat across weeks and regions.
* For "top" queries, always GROUP BY term (country-level) and compute rank as MIN(rank).

#### 3. Defaults:

* Country-level results only.
* Use region_code only if the user explicitly asks for regions.
* Limit results unless the user asks otherwise.

#### 4. Time series usage:

* Only include week or score when the user asks for trends over time, historical context, or week-over-week score changes.

#### 5. Field guidance:

* Prefer country_code or region_code for filters.
* country_name / region_name are for display only.
* score is normalized; compare trends within a term, not across terms.

検証済みのクエリ

確認済みのクエリ(以前はゴールデン クエリと呼ばれていました)は、エージェントが回答の精度を高めるための参考資料として使用されます。これらは、エージェントのレスポンス構造を形成し、組織で使用されるビジネス ロジックをエージェントに教えるのに役立ちます。

エージェントに 2 つの例を追加してみましょう。[クエリを追加] をクリックし、次の質問とクエリをコピーして貼り付けます。

質問 1:

What are the top search terms in the UK right now?

クエリ 1:

SELECT term, MIN(rank) AS rank
FROM `bigquery-public-data.google_trends.international_top_terms`
WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
  AND country_code = 'GB'
GROUP BY term
ORDER BY rank
LIMIT 25;

このクエリを保存する前に、実行して有効であることを確認しましょう。

e3fb570a4109e93c.png

問題ありません。[追加] をクリックして、検証済みのクエリを保存します。

より複雑なユースケースの例をもう 1 つ追加しましょう。[クエリを管理する] をクリックして、以下を追加します。

質問 2:

Show the last 12 weeks of interest for the current top 5 terms in Auckland.

回答 2:

WITH top5 AS (
  SELECT term, MIN(rank) AS rank
  FROM `bigquery-public-data.google_trends.international_top_terms`
  WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
    AND country_code = 'NZ'
    AND region_code = 'NZ-AUK'
  GROUP BY 1
  ORDER BY 2
  LIMIT 5
),
series AS (
  SELECT term, week, score,
    ROW_NUMBER() OVER (PARTITION BY term ORDER BY week DESC) AS rn
  FROM `bigquery-public-data.google_trends.international_top_terms`
  WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
    AND country_code = 'NZ'
    AND region_code = 'NZ-AUK'
    AND term IN (SELECT term FROM top5)
)
SELECT week, term, score
FROM series
WHERE rn <= 12
ORDER BY 1 DESC, 3

次のセクションに進む前に、Gemini が生成した候補を見てみましょう。

b52489d21f503a76.png

ここでは、検証済みクエリの候補を確認できます。今後新しいエージェントを作成する際に、この設定を起点として使用できます。追加するクエリは必ず検証してください。

用語集

用語集に用語を追加してみましょう。ビジネスで Dataplex を使用している場合、これらの用語は Dataplex Universal Catalog のビジネス用語集から直接インポートされます。

[用語を追加] をクリックし、次の例をコピーして貼り付けます。

期間:

refresh_date

定義:

Snapshot date that selects the daily Top 25 term set. All rows for that date belong to the same "what's trending now" snapshot. Attach Historical week and score values after this selection.

同義語:

today, latest, current, now, recent

[追加]、[保存] の順にクリックします。

33b4a74fcde504d5.png

エージェントの設定

[設定] セクションで、ラベル課金される最大バイト数を構成できます。

ラベル

ラベルは、Google Cloud リソースを論理グループに整理するために使用される Key-Value ペアです。このラボでは、ラベルは空白のままにします。

課金対象の最大バイト数

高コストのクエリが誤って生成されないように、クエリごとに課金される最大バイト数の上限を設定しましょう。エージェントのクエリでこの制限を超えるバイト数が処理された場合、クエリは失敗し、料金は発生しません。次の値を入力します。

10000000000

10,000,000,000 バイトは約 9.3 GB です。値を指定しない場合、課金される最大バイト数は、プロジェクトの 1 日あたりのクエリ使用量の割り当てにデフォルト設定されます。

5. エージェントの保存と共有

プレビュー

準備が整いました。次に進む前に、エージェントをテストしましょう。画面の右側では、構成を編集しながらエージェントを動的にテストできます。プレビューでは、変更を保存または公開することなく、指定した新しいメタデータが自動的に使用されます。

エージェントがアクセスできるデータを尋ねてみましょう。ご自身の言葉で質問してください。

b2679cc7c6c926b2.png

保存

いくつかのプロンプトをテストしたら、[保存] をクリックし、エージェントを公開します。

56a45347d496dd42.png

エージェントを公開すると、BigQuery Studio、Conversational Analytics API、Looker Studio Pro で使用できるようになります(ライセンスが必要)。

a4fbeb3011d409f5.png

今後のリリースでは、他のサーフェスやインテグレーションもサポートされる予定です。

共有

エージェントが公開されたことを示す確認メッセージが表示されます。このエージェントを他のユーザーと共有できるようになりました。

bdd4ee4be02c26d8.png

エージェントを他のユーザーと共有する場合は、特定のロールを割り当てることで、ユーザーのアクセスレベルを制御します。これらのロールは、共同編集者がエージェントを閲覧できるだけなのか、構成を編集して管理できる権限があるのかを決定します。

これらのロールは、次の 2 つの異なるレベルで適用できます。

  • プロジェクト レベル: プロジェクト レベルでロールを付与すると、その Google Cloud プロジェクト内のすべてのエージェントに対して、ユーザーにこれらの権限が付与されます。
  • エージェント レベル: よりきめ細かい制御を行うには、特定のエージェントにロールを付与します。これは、ユーザーがプロジェクト内の他のデータ エージェントを表示せずに、特定のデータ エージェントにアクセスできるようにする場合に便利です。

Conversational Analytics の事前定義ロールは次のとおりです。

  1. Gemini データ分析データ エージェント オーナー(roles/geminidataanalytics.dataAgentOwner)- すべてのデータ エージェントを作成、編集、共有、削除する
  2. Gemini データ分析データ エージェント作成者(roles/geminidataanalytics.dataAgentCreator)- 独自のデータ エージェントを作成、編集、共有、削除する
  3. Gemini データ分析データ エージェント編集者(roles/geminidataanalytics.dataAgentEditor)- データ エージェントに対するチャットと編集の権限
  4. データ分析データ エージェント ユーザー(roles/geminidataanalytics.dataAgentUser)- データ エージェントへのチャットと表示アクセス
  5. Gemini データ分析データ エージェント閲覧者(roles/geminidataanalytics.dataAgentViewer)- データ エージェントへの表示(読み取り専用)アクセス権

6. エージェントとの会話を作成する

[共有] タブを閉じて、新しい会話を作成します。

d7a824ed0aaeaf12.png

[会話を作成] をクリックすると、新しい無題の会話が生成されます。

イングランドでトレンドになっている用語について質問してみましょう(任意の場所に置き換えてもかまいません)。

Based on the top 10 terms in England, how did they trend for the past 3 months?

レスポンス ストリームのアンパック

データ エージェントは通常、質問に答える際に同じレスポンス ストリームをたどります。

  1. 推論: エージェントはまずプロンプトを「思考」します。[推論を表示] ボタンを開くと、エージェントの意思決定プロセスに関する段階的な分析情報が表示されます。
  2. 概要: エージェントは、クエリ、結果のレポート、可視化の概要を生成します。
  3. 生成された SQL: [クエリはこちら...] セクションを開いて、SQL を確認します。[エディタで開く] をクリックして、BigQuery Studio でクエリを手動で微調整します。
  4. データ結果: エージェントがクエリ結果をわかりやすい表形式で表示します。
  5. 可視化: グラフと簡単な説明が表示されます。エージェントは、データに最適なビジュアリゼーション タイプ(複数系列の折れ線グラフなど)を自動的に推測します。
  6. データ分析情報: エージェントは、結果から得られた主な傾向と重要なポイントを要約します。
  7. フォローアップの質問: 最後に、分析を続行するのに役立つ関連性の高いフォローアップの質問が提案されます。

ee07f83cdbd20de1.png

BigQuery ML のサポート

これらの結果に基づいてデータ エージェントが予測を実行できるかどうかを確認します。これは、BigQuery ML 関数を利用して将来のポイントを予測します。

次のプロンプトを入力します(「monopoly board」はクエリに関連する用語に置き換えてください)。

Can you predict and visualize how monopoly board will trend in the next 4 weeks?

AI_FORECAST を使用して時系列を予測したことがわかります。2021 年 8 月に大きなスパイクが見られますが、これはロンドンの Monopoly Lifesized アトラクションのグランド オープンと一致しています。

441a92d19f7d15e0.png

7. エージェント カタログを確認する

最後に、エージェント カタログについて説明します。ウィンドウの上部にある [エージェント カタログ] をクリックします。

59acded82548bd.png

このページは、データ エージェント管理の中心的なハブとして機能し、次のセクションで構成されています。

  • マイ エージェント: 現在公開されているエージェント。
  • 下書きエージェント: 保存済みで、まだ公開されていない構成。
  • 組織内の他のユーザーが共有: アクセス権限がある同僚が作成したエージェント。
  • Google によるサンプル エージェント: 事前構成済みの例で、すぐに始めることができます。

管理しているエージェントについては、構成の編集、エージェントの複製、共有権限の管理を行うことができます。

8. まとめ

これで、会話分析データ エージェントが完成しました。詳細については、参考資料をご覧ください。

参考資料