BigQueryデータキャンバスを使いこなすためのプロンプトエンジニアリング

記事タイトルとURLをコピーする

G-gen の min です。BigQuery に統合された AI アシスタント機能である BigQuery データキャンバス について、より実践的な活用方法と、技術的な制約事項について解説します。

はじめに

BigQuery データキャンバスとは

BigQuery データキャンバス(BigQuery data canvas)は自然言語による指示と、グラフィカルなユーザーインターフェイスによってデータの検索、変換、クエリ、可視化を行う機能です。

Gemini in BigQuery の全体像や、データキャンバスの基本的な使い方については、以下の記事をご参照ください。

blog.g-gen.co.jp

Conversational Analytics API とは

BigQuery データキャンバスの裏側では、Conversational Analytics API という API が動作しています。この API は、ユーザーからの自然言語による質問を受け取り、Gemini モデルを使用して SQL クエリを生成し、データを取得して可視化を行う役割を担っています。

当記事では、Conversational Analytics API の仕様に基づいて、データキャンバスを効果的に利用するための質問テクニックと、考慮すべき制限事項について解説します。

効果的な質問のテクニック

コンテキストを具体的に提示する

漠然とした質問は、AI の解釈の幅を広げすぎてしまい、期待しない回答につながります。日付、カテゴリ、数値フィルタ、計算ロジックなどの詳細なコンテキストを含めることで、回答の精度が向上します。

  • 改善前 「手動とシステムの請求書はいくつですか?」
  • 改善後毎月手動で作成される請求書とシステムで作成される請求書の数を教えてください。手動の請求書を1通作成するのに15分かかると仮定して、すべての手動の請求書を処理するのにかかる合計時間を時間単位で計算して、概要を提示してください。」

このように、具体的な計算要件(「15分かかると仮定」)や出力形式(「概要を提示」)を含めることが重要です。

複雑な分析は複数のステップに分割する

人間と同様に、AI も一度に複数のタスクを依頼されると混乱することがあります。複雑な分析を行いたい場合は、質問を複数のステップに分割し、データキャンバス上でノードをつなげていくアプローチが有効です。

例えば、「各売掛金タイプの平均決済日数と、手動決済の割合と、それにかかった年間時間は?」と一度に聞くのではなく、以下のように分割します。

  1. 「2025年5月5日から2025年6月1日までの各売掛金タイプの平均所要日数は何日ですか?」
  2. その結果に対して、「手動決済の割合はどれくらいですか?」
  3. さらにその結果に対して、「手動決済に1つあたり15分かかると仮定した場合、年間でどれくらいの時間を費やしていますか?」

このように段階を追うことで、各ステップで適切なフィルタや集計が適用され、正確な結果が得やすくなります。

データ条件と集計方法を明示する

SQL の WHERE 句や GROUP BY 句に相当する条件を、自然言語で明確に指示します。

  • フィルタ条件 「2025年5月2日から2025年6月3日までの請求書」「未払い残高で結果を最大5件に制限」など
  • 集計条件 「顧客名ごとの未払い残高の合計」「平均経過日数」など

フォローアップ質問で深掘りする

一度の質問で完結させる必要はありません。前の質問の結果(コンテキスト)を踏まえて、条件を変更したり追加したりする「フォローアップ質問」が可能です。

  • 元の質問 「46 日を超えて経過したレコードについて、顧客名と未払い残高を教えてください」
  • フォローアップ 「90 日を超えたレコードに条件を変更し、上位10件に制限してください」

出力形式を指定するキーワード

プロンプトに含めるキーワードによって、データキャンバスが提案する可視化形式(グラフの種類)をコントロールできます。

期待する形式 プロンプトに含めるキーワードの例
テーブル (表) 列名を具体的に列挙する(例 : 「顧客名、未払い残高、平均経過日数、売掛金タイプを教えてください」)
テキスト (文章) 「概要」「要約」「簡単な回答」
折れ線グラフ 「傾向」「推移」「変化」「変化率」
棒グラフ / 比較表 「比較」「分散」「違い」「上位の業種」

サンプルデータによる検証

データの準備

以下の SQL を BigQuery クエリエディタで実行すると、約 1,000 件のダミーデータ(請求書データ)を含むテーブル invoices_sample が作成されます。 このデータセットは、手動(Manual)とシステム(System)作成の偏りや、ランダムな滞留日数を含むデータセットです。

project_id.dataset_id の部分は、ご自身の検証環境に合わせて変更してください。

CREATE OR REPLACE TABLE `project_id.dataset_id.invoices_sample`
AS
WITH
  generator AS (
    -- 1から1000までの数字を生成(1000行のデータを作成)
    SELECT x FROM UNNEST(GENERATE_ARRAY(1, 1000)) AS x
  )
SELECT
  -- 請求書ID: INV-00001 の形式
  CONCAT('INV-', LPAD(CAST(x AS STRING), 5, '0')) AS invoice_id,

  -- 顧客名: Client_1 〜 Client_50 をランダムに割り当て
  CONCAT('Client_', CAST(FLOOR(1 + RAND() * 50) AS INT64)) AS customer_name,

  -- 請求日: 2024年1月1日から約1年半の範囲でランダムに生成(記事内の2025年5月も含む)
  DATE_ADD(DATE('2024-01-01'), INTERVAL CAST(FLOOR(RAND() * 550) AS INT64) DAY)
    AS invoice_date,

  -- 作成タイプ: 70%を System、30%を Manual に偏らせる
  CASE
    WHEN RAND() < 0.3 THEN 'Manual'
    ELSE 'System'
    END AS creation_type,

  -- 売掛金タイプ: 3種類をランダムに分布
  CASE
    WHEN RAND() < 0.5 THEN 'Product'
    WHEN RAND() < 0.8 THEN 'Service'
    ELSE 'Consulting'
    END AS ar_type,

  -- 金額: 1,000 〜 100,000 の間でランダム
  CAST(FLOOR(1000 + RAND() * 99000) AS INT64) AS amount,

  -- 経過日数: 0日のもの(正常)と、長期滞留(異常値)を混ぜる
  CAST(
    FLOOR(
      CASE
        WHEN RAND() < 0.5 THEN 0  -- 50%は未経過(0日)
        WHEN RAND() < 0.8 THEN RAND() * 30  -- 30%は30日以内
        ELSE 30 + RAND() * 100  -- 20%は長期滞留(30〜130日)
        END)
    AS INT64) AS days_overdue
FROM generator;

実行例

作成したテーブルをデータキャンバスで開き、先ほど紹介した「コンテキストの提示」を意識したプロンプトを入力してみます。単純な集計だけでなく、仮定に基づいた計算を依頼します。

プロンプト

creation_type が Manual の請求書と System の請求書の数を教えてください。Manual の請求書 1 通作成するのに 15 分かかると仮定して、すべての Manual 請求書を処理するのにかかる合計時間を 時間単位で計算して、概要を提示してください。

実行結果

「Manual の請求書は 306 件、System の請求書は 694 件です。

Manual の請求書をすべて処理するのにかかる合計時間は、306 件 * 15 分/件 = 4590 分、つまり 76.5 時間です。

以下に、作成タイプ別の請求書数を示すグラフを添付します。

ご不明な点がございましたら、お気軽にお尋ねください。」

このデータセットでは、約 30% が Manual(手動)作成として生成されます。AI は単純にレコード数を数えるだけでなく、指示通り「件数 × 15分 ÷ 60分」の計算を行い、「手動処理に合計で約 76.5 時間かかっています」 といった洞察を返します。

制限事項

概要

Conversational Analytics API の制限事項についてのドキュメントを確認することで、BigQuery データキャンバスの制約事項を理解することができます。当記事では2026年1月現在のドキュメントの記載に基づき、重要なものをピックアップして紹介します。最新情報は、以下のドキュメントを参照してください。

可視化の制限

チャート(図表)の種類によってサポート状況が異なります。

  • サポート対象 : 折れ線グラフ、面グラフ、棒グラフ(横、縦、積み上げ)、散布図、円グラフ
  • 部分的にサポート対象(予期しない動作の可能性あり) : マップ、ヒートマップ、ツールチップ付きのグラフ

データ処理の制限

大量データを扱う場合、以下の制限に注意が必要です。

  • BigQuery スキャン制限 : 処理バイト数は500 GB まで。パーティション分割などを利用し、スキャン量を抑える工夫が必要
  • 結果サイズ : システムが返すデータ結果(DataResult)は、最大3,000,000バイト(約3MB)。超過分は切り捨て

サポートされる質問の種類

現時点では、主にデータの「集計」「可視化」を得意としています。

  • サポート対象 : 指標の推移、ディメンション別の内訳・分布、ランキング、一意の値の抽出など
  • サポート対象外 : 将来の予測、相関分析・異常検出などの高度な統計分析

佐々木 愛美 (min) (記事一覧)

クラウドソリューション部 データアナリティクス課。2024年7月 G-gen にジョイン。G-gen 最南端、沖縄県在住。最近覚えた島言葉は、「マヤー(猫)」。