広告枠を募集中 ご相談ください

SnowflakeとGoogle BigQueryをDustに接続して自然言語によるSQLテーブル検索を実現する方法

365Finds Editorial
Wiki 記事 11,430 本収録

あなたの AI で 365 Wiki を使う

下のプロンプトをコピーして、普段使っている AI に貼り付け、そのまま質問してください。

完全版 Skill をダウンロード

まずはプロンプトでお試しください。よく使う場合は完全版 365Wiki Skill をインストールすると、毎回貼り付ける必要がありません。普段使う AI がなければ、Gemini や Microsoft Copilot のウェブ版でも使えます。

企業のデータ分析チームやテクニカルオペレーションチームは、日頃から業務部門からの突発的なレポート作成や指標集計の依頼に追われています。セルフサービスBIツールは非エンジニアにとってハードルが高く、データアナリストへのチケットが滞留しがちです。しかし、一般的なドキュメント検索やRAG(検索拡張生成)アプローチではこの問題を解決できません。セマンティック検索は文章ベクトルの類似度に基づくため、数百万行のデータに対する数値集計、グループ化、期間フィルタリング、比率計算などの定量的クエリを正確に実行することが不可能です。

Dustは、構造化データの統合と**Table queries(テーブルクエリ)**機能によってこの課題を解決します。Dustはデータウェアハウスの実データを複製・保存することなく、SnowflakeやGoogle BigQueryと直接連携してテーブルスキーマのメタデータを取得・マッピングします。これにより、AIエージェントが制御された読み取り専用SQLを直接生成・実行し、集計結果をわかりやすい自然言語のインサイトやチャートへと変換します。

本記事では、SnowflakeおよびGoogle BigQueryをDustに接続するためのアーキテクチャ、セキュリティ設定、テーブル結合のベストプラクティス、そして実用的なエージェント構築手順を解説します。


アーキテクチャ:実データを保存せずにウェアハウスをクエリする仕組み

企業の中核データウェアハウスをサードパーティのAI基盤に接続する際、最大の懸念事項となるのがデータプライバシーとガバナンスです。Dustは「メタデータのみ」を取り扱うゼロデータ同期アーキテクチャを採用しています。

  1. 実データの同期・保存なし:DustはSnowflakeやBigQueryのテーブルレコードを自身のサーバーやベクトルDBに複製・保存しません。データベース名、データセット名、スキーマ名、テーブル名、カラム名、データ型、およびウェアハウス内のメタデータ記述のみをインデックス化します。
  2. スキーマコンテキストの注入:ユーザーが「前四半期の地域別平均注文額は?」といったビジネスの質問を入力すると、エージェントはマッピングされたテーブルスキーマを参照して関連エンティティを特定します。
  3. 制御されたSQL生成:LLMは接続先の方言(Snowflake SQLまたはGoogleSQL)に厳密に従い、構文的に正しいSQLクエリを構築します。
  4. ウェアハウスでの直接実行:生成されたSQLは暗号化通信を介して対象のウェアハウスに送信され、読み取り専用の権限下で安全に実行されます。
  5. インサイト変換と高い透明性:返却された集計データを基にエージェントが自然言語の回答やグラフを作成します。会話画面の**Tools inspection(ツールインスペクション)**ボタンをクリックすることで、生成された正確なSQL文、実行時間、元データをいつでも検証・監査できます。

方法1:SnowflakeをDustに接続する

DustにおけるSnowflake連携には、**Snowflake Connection(管理型接続)とSnowflake Tool(OAuthベースのツール連携)**の2種類があります。統制された社内分析エージェントを構築する場合、一般的に管理型接続(Snowflake Connection)が推奨されます。

1. Snowflake側の権限設計とインフラ準備

最小権限の原則に基づき、Snowflake側でDust専用のウェアハウス、ユーザー、ロールを作成します。

-- ステップ1: 専用ロールの作成
CREATE ROLE dust_role;

-- ステップ2: 自動サスペンド付きの軽量ウェアハウスを作成
CREATE WAREHOUSE dust_warehouse
WITH WAREHOUSE_SIZE = 'XSMALL'
AUTO_SUSPEND = 300
AUTO_RESUME = TRUE;

GRANT USAGE ON WAREHOUSE dust_warehouse TO ROLE dust_role;

認証方式の選定:キーペア認証 vs. パスワード認証

Snowflakeではプログラムアクセスにおけるパスワード認証の非推奨化が進んでいるため、本番環境では**RSAキーペア認証(Key Pair Authentication)**が推奨されます。

RSAキーペア認証の設定(推奨):

  1. 2048ビットのRSA秘密鍵と公開鍵を生成します。
    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out dust_rsa_key.p8 -nocrypt
    openssl rsa -in dust_rsa_key.p8 -pubout -out dust_rsa_key.pub
    
  2. ヘッダー・フッター・改行を除去した公開鍵文字列を抽出します。
    cat dust_rsa_key.pub | grep -v "BEGIN PUBLIC KEY" | grep -v "END PUBLIC KEY" | tr -d '\n'
    
  3. 公開鍵をバインドした専用ユーザーを作成します。
    CREATE USER dust_user
      DEFAULT_ROLE = dust_role
      RSA_PUBLIC_KEY = '<抽出した公開鍵文字列を貼り付け>';
    
    GRANT ROLE dust_role TO USER dust_user;
    

代替案(パスワード認証):

CREATE USER dust_user
  PASSWORD = 'YourStrongPasswordHere'
  DEFAULT_ROLE = dust_role;

GRANT ROLE dust_role TO USER dust_user;

2. ネットワークポリシーのIP許可と読み取り専用権限の付与

SnowflakeのネットワークポリシーでIP制限を実施している場合は、Dustの静的エグレスIPを許可リストに追加します。

続いて、対象データベースおよびスキーマへのアクセス権を付与します。Dustのコネクタは書き込み権限(INSERT、UPDATE、DELETE、MERGEなど)が付与されたロールを拒否し、厳格に読み取り専用を保ちます。

-- データベースとスキーマのUSAGE権限を付与
GRANT USAGE ON DATABASE analytics_dw TO ROLE dust_role;
GRANT USAGE ON SCHEMA analytics_dw.marts TO ROLE dust_role;

-- 実テーブルに対するSELECT権限を付与
GRANT SELECT ON ALL TABLES IN SCHEMA analytics_dw.marts TO ROLE dust_role;
GRANT SELECT ON FUTURE TABLES IN SCHEMA analytics_dw.marts TO ROLE dust_role;

重要:Snowflake Connectionは物理テーブル(Tables)のみを検出し、通常のビューやマテリアライズドビューは除外されます。ビューの検索が必須のユースケースでは、OAuth連携のSnowflake Toolを使用してください。

3. Dustダッシュボードでの接続設定

  1. Dustにログインし、Spaces > Connections > Add ConnectionsからSnowflakeを選択します。
  2. 認証方式としてKey Pair Authentication(またはPassword)を選択します。
  3. 接続情報を入力します:
    • Account Identifier:アカウント識別子(例:xy12345.us-east-1 または orgname-accountname)
    • Role:dust_role
    • Warehouse:dust_warehouse
    • Username:dust_user
    • Private Key:生成した秘密鍵(PEM形式)の全文(ヘッダーとフッターを含む)を貼り付け
  4. エージェントに公開するデータベース、スキーマ、および対象テーブルを選択します。

方法2:Google BigQueryをDustに接続する

Google BigQueryは、Google Cloud Platform(GCP)のIAMサービスアカウントキーを使用して接続します。BigQueryのリージョン制約への対応と、カラム説明の自動取り込みが大きな特徴です。

1. GCP側のサービスアカウントとIAM設定

  1. Google Cloud ConsoleのIAMと管理 > サービス アカウントを開きます。
  2. サービス アカウントを作成をクリックし、名前(例:dust-warehouse-sa)を設定します。
  3. 以下の2つの必須ロールを付与します:
    • roles/bigquery.user:クエリジョブの実行、データセットの一覧表示、コンピュートの利用権限
    • roles/bigquery.dataViewer:データセットスキーマの参照およびテーブルデータの読み取り権限
  4. 作成したサービスアカウントのキータブに移動し、鍵を追加 > 新しい鍵を作成 > JSONを選択します。
  5. ダウンロードしたJSON認証情報ファイルを安全に保管します。

2. DustでのBigQueryデータソース登録

  1. DustのSpaces > Connections > Add ConnectionsからBigQueryを選択します。
  2. ダウンロードしたサービスアカウントのJSONキーの内容を貼り付けます。
  3. ロケーション(Location)の選択:BigQueryはリージョンを跨ぐクエリ(例:USとEUのデータセット結合)を禁止しています。そのため、この接続で使用するロケーション(US、EU、us-central1など)を1つ選択し、同一ロケーションのデータセットのみを選択対象とします。
  4. 公開するデータセットとテーブルを選択します。
  5. 「Use BigQuery descriptions」を有効化:この設定をオンにすると、BigQuery側で定義されているテーブルおよびカラムのDescription(説明)が自動的にエージェントに渡され、プロンプトで個別に定義する手間を大幅に削減できます。

Snowflake ConnectionとSnowflake Toolの比較

Snowflake連携を検討する際、要件に応じて適切な方式を選択します。

評価軸Snowflake Connection(管理型接続)Snowflake Tool(OAuthツール連携)
主な用途統制された定型指標・集計データのセルフサービス化分析者向け動的スキーマ探索・アドホックなビュー検索
認証方式共有サービスアカウント(キーペアまたはパスワード)個別ユーザーOAuth(個人権限継承)またはワークスペースOAuth
対象オブジェクト物理テーブルのみ(ビューは対象外)物理テーブル、標準ビュー、マテリアライズドビュー
行数制限最大25,000行まで取得可能1回の実行につき最大1,000行まで
スキーマ探索管理者がスペース設定で事前定義エージェントが実行時にlist_schemasやdescribe_tableを呼び出し
マルチステートメントSQL遮断(セミコロン区切り複数文は不可)遮断(セミコロン区切り複数文は不可)

自然言語クエリを実行するAIエージェントの構成と指示文

データウェアハウスを接続した後、ビジネスユーザー向けのエージェント(例:@データ分析アシスタント)を作成します。

1. エージェントへのQuery Tablesツールの追加

  1. DustのAgent Builder > Instructions & Toolsを開きます。
  2. Action & Data sourcesでAdd a toolをクリックし、Query Tablesを選択します。
  3. 接続済みのSnowflakeまたはBigQueryテーブル(例:marts.fct_daily_orders)を選択します。

2. プロンプトによる結合条件と計算ルールの指定

モデルはテーブルのメタデータを読み取りますが、正確なテーブル結合や業務独自の指標定義を担保するために、プロンプトで明確なルールを指定します。

あなたはビジネスチームの指標に関する質問に回答する分析エージェントです。以下のデータウェアハウスのテーブルを利用できます。
- fct_orders: 過去の注文数、売上金額、ステータスを保持。
- dim_customers: 顧客ランク、登録日、企業属性を保持。

クエリ生成および回答のルール:
1. テーブル結合を行う際は、dim_customers.customer_id = fct_orders.customer_id を結合キーとして使用してください。
2. 実現売上を集計する場合、未払いパイプラインの集計を明示的に求められない限り、常に order_status = 'COMPLETED' で絞り込んでください。
3. SELECT * は避け、必要なカラムのみを明示的に指定してください。
4. 時系列の推移を比較する場合は、UTCタイムスタンプを月次または四半期単位にまとめてください。
5. 表形式のデータを出力した後、主要な増減要因や示唆を簡潔な自然言語で添えてください。

3. クエリ実行の監査(Tools Inspection)

質問が投稿されると、Dustはスキーマ情報の読み込み、SQL生成、ウェアハウスでの実行、回答整形を自動的に行います。ユーザーは回答にあるTools inspectionをクリックすることで、実行された生のSQL構文や所要時間、取得されたデータ行を確認でき、ブラックボックス化を防ぐことができます。


データ・分析チーム向け実践プラクティス

  1. 生ログではなくデータマート(Marts/Gold層)を公開する:生ログ(Bronze層)ではなく、dbt等でモデリングされた正規化済みのデータマートを接続先に指定することで、SQL生成の精度が劇的に向上します。
  2. ウェアハウス側のカラムコメントを充実させる:BigQueryやSnowflakeのDDLコメント(COMMENT)を記述しておけば、プロンプトを複雑にしなくてもAIが略称(MRR、CACなど)の意味を正確に理解します。
  3. コンピュートコストの抑制:
    • Snowflakeでは最小構成のXSMALLウェアハウスを割り当て、AUTO_SUSPENDを300秒以下に設定します。
    • BigQueryでは専用サービスアカウントに対してプロジェクトレベルのスキャンバイト数上限を設け、フルスキャンによる予期せぬ課金を防ぎます。
  4. 非構造化ドキュメント検索(RAG)との併用:エージェントにQuery TablesとSearch Data Source(ドキュメント検索)の両方を設定することで、BigQueryの実績数値とNotion内の施策振り返りドキュメントを組み合わせ、「売上が減少した背景」まで網羅した高度な回答が可能になります。

参考文献