企業資料分析團隊與技術維運團隊經常面臨一項協作瓶頸:業務部門需要大量的日常指標與即時報表支援,然而傳統的自服務 BI 工具操作門檻偏高,導致分析師的工單積壓嚴重。然而,常見的非結構化文件知識庫與檢索增強生成(RAG)方案在面對此類場景時完全無法奏效——語意搜尋依賴文字向量相似度,根本無法處理跨越數百萬行資料的數值加總、維度分組聚合、動態篩選或留存率統計。
Dust 透過其結構化資料整合能力與 Table queries(資料表查詢) 功能徹底突破了這個局限。Dust 無需搬遷或重複儲存企業資料倉儲中的原始數據,而是直接與 Snowflake 和 Google BigQuery 建立安全連線,提取並映射結構描述(Table Schema)中繼資料,驅動 AI 智能體直接生成受控的唯讀 SQL 查詢,並將運算結果轉譯為清晰易懂的自然語言業務洞察與動態圖表。
本文將深入解析 Dust 連接 Snowflake 與 Google BigQuery 的底層技術架構、安全性授權、跨表關聯指引與 Prompt 最佳實踐,協助資料團隊快速部署企業級資料倉儲自然語言查詢智能體。
核心架構:Dust 如何在不儲存原始數據的前提下查詢資料倉儲
將企業核心資料倉儲介接至第三方 AI 平台時,資訊安全與資料所有權往往是企業架構師的首要考量。Dust 採用「僅限中繼資料(Metadata-Only)」的架構設計:
- 零原始數據同步:Dust 不會在自家伺服器或向量資料庫中同步、鏡像或持久化 Snowflake 或 BigQuery 中的實際資料列。平台僅讀取並索引結構中繼資料:資料庫名稱、資料集識別碼、結構描述名稱(Schema)、資料表名稱、欄位名稱、資料型態以及倉儲內設定的原生欄位註解。
- Schema 上下文注入:當業務同仁提出定量問題(例如「上一季各區域的平均客單價是多少?」)時,智能體會參照當前已掛載的資料表結構定義,識別相關實體與指標欄位。
- 受控 SQL 生成:大型語言模型嚴格遵循目標資料來源的方言語法(Snowflake SQL 或 GoogleSQL)撰寫精確的 SQL 查詢語句。
- 直連唯讀執行:Dust 透過加密連線,使用專用的唯讀憑證向目標倉儲提交查詢工作並擷取計算結果。
- 洞察轉譯與稽核透明度:智能體解析回傳的表格資料,生成業務總結或視覺化圖表。同時,使用者可隨時點擊對話視窗中的 Tools inspection(工具檢查) 按鈕,檢視完整的 SQL 語法、執行耗時與原始回應數據,確保所有計算過程公開透明且可被檢驗。
方案一:連接 Snowflake 至 Dust
針對 Snowflake,Dust 提供兩種整合模式:Snowflake Connection(受管資料倉儲連線) 與 Snowflake Tool(OAuth 工具模式)。建置受控的企業自服務指標問答智能體時,資料團隊通常優先採用前者。
1. Snowflake 端安全性設定與基礎設施佈署
依據最小權限原則,在 Snowflake 中建立專屬的運算倉儲、服務使用者帳號與存取角色:
-- 步驟 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 金鑰組認證(推薦):
- 產生 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 - 擷取去除開頭、結尾標籤與換行符號的純公開金鑰字串:
cat dust_rsa_key.pub | grep -v "BEGIN PUBLIC KEY" | grep -v "END PUBLIC KEY" | tr -d '\n' - 建立綁定公開金鑰的 Snowflake 服務帳號:
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. 網路策略加入允許清單與唯讀權限配置
若 Snowflake 帳戶已啟用網路原則(Network Policy),請將 Dust 的靜態輸出 IP 位址加入允許清單:
- 美國區工作區(
https://dust.tt):34.46.9.232 - 歐盟區工作區(
https://eu.dust.tt):35.195.191.222
接著配置中繼資料與資料表讀取權限。Dust 連接器會主動審查角色權限,嚴格拒絕包含任何寫入或修改權限(如 INSERT、UPDATE、DELETE、MERGE)的角色:
-- 授予資料庫與 Schema 的 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)生效,會主動忽略一般檢視表(Views)與具體化檢視表(Materialized Views)。若業務架構必須直接查詢檢視表,請改採基於 OAuth 的 Snowflake Tool。
3. 在 Dust 後台啟用連線
- 登入 Dust,前往 Spaces > Connections,點選 Add Connections 並選擇 Snowflake。
- 選擇 Key Pair Authentication(或密碼認證)。
- 依序填入連線參數:
- Account Identifier:Snowflake 帳戶識別碼(例如
xy12345.us-east-1或orgname-accountname)。 - Role:
dust_role。 - Warehouse:
dust_warehouse。 - Username:
dust_user。 - Private Key:完整貼上包含標頭與標尾的 PEM 格式私密金鑰內容。
- Account Identifier:Snowflake 帳戶識別碼(例如
- 勾選欲授權給 Dust 智能體使用的資料庫、Schema 與實體資料表。
方案二:連接 Google BigQuery 至 Dust
Google BigQuery 透過 Google Cloud Platform(GCP)的 IAM 服務帳號金鑰與 Dust 連接,原生支援資料表欄位註解自動導入與地理區域隔離。
1. GCP 服務帳號與權限配置
- 登入 Google Cloud Console,進入 IAM 與管理 > 服務帳戶。
- 點選 建立服務帳戶,命名為
dust-warehouse-sa。 - 指派至少兩項必要的唯讀與查詢執行 IAM 角色:
roles/bigquery.user:允許 Dust 提交查詢工作(Query Jobs)、列出資料集並取用運算配額。roles/bigquery.dataViewer:允許 Dust 檢視資料集架構並讀取資料表內容。
- 進入該服務帳號的 金鑰 分頁,點選 新增金鑰 > 建立新的金鑰 > JSON。
- 下載並妥善保管產生的 JSON 憑證檔案。
2. 在 Dust 中註冊 BigQuery 資源
- 前往 Dust 的 Spaces > Connections > Add Connections,選擇 BigQuery。
- 將下載的 JSON 檔案完整內容貼入輸入方塊中。
- 選擇 BigQuery 地理區域(Location):BigQuery 在底層架構上嚴格禁止跨區域關聯查詢(例如無法在同一條 SQL 中 JOIN 位於
EU與US的資料集)。必須指定此連線對應的區域(如US、EU或特定區域),且所有選取的資料集必須位於同一地理位置。 - 選取欲公開給智能體查詢的資料集與資料表。
- 啟用「Use BigQuery descriptions」選項:勾選此設定後,Dust 會自動將 BigQuery 結構中維護的資料表說明與欄位註解同步為智能體的提示上下文,大幅減少手動維護欄位說明的成本。
方案比較:Snowflake Connection 與 Snowflake Tool 如何抉擇?
面對 Snowflake,團隊在評估架構時需釐清兩種連線方式的差異:
| 評估維度 | Snowflake Connection(受管連線) | Snowflake Tool(OAuth 工具模式) |
|---|---|---|
| 主要定位 | 企業團隊受控報表與核心指標問答 | 分析師動態結構探索與即席檢視表查詢 |
| 驗證機制 | 集中式服務帳號(金鑰組或密碼) | 個人用戶 OAuth(遵循個人權限)或工作區統一 OAuth |
| 支援物件 | 僅限實體資料表(不支援任何檢視表) | 支援實體資料表、一般檢視表與具體化檢視表 |
| 資料回傳上限 | 單次查詢最高支援 25,000 列 | 單次查詢執行上限為 1,000 列 |
| Schema 探索 | 由管理員在 Space 設定中預先指定並發布 | 智能體於執行階段動態呼叫 list_schemas、describe_table |
| 多語句 SQL 防護 | 嚴格阻斷多分號語句 | 嚴格阻斷多分號語句 |
設定與引導企業級自然語言查詢智能體
資料倉儲成功連接至 Dust 後,資料團隊可建立專屬商業分析智能體(例如 @經營數據助手),讓非技術同仁透過口語化對話取得報表數據。
1. 為智能體掛載 Query Tables 工具
在 Dust 智能體編輯介面中:
- 進入 Agent Builder > Instructions & Tools。
- 於 Action & Data sources 下點選 Add a tool,選擇 Query Tables。
- 勾選欲開放的 Snowflake 或 BigQuery 核心資料表(例如
marts.fct_daily_orders)。
2. 在 Prompt 中明確定義跨表關聯與業務指標邏輯
雖然模型能辨識基礎欄位型態,但在處理多表關聯(JOIN)與特定指標定義時,明確的指令指引能杜絕模型產生幻覺:
你負責解答業務團隊關於營運數據的提問。你已被授權存取以下資料倉儲表格:
- fct_orders:記錄歷史訂單交易筆數、金額與履約狀態。
- dim_customers:記錄客戶等級、註冊日期與所屬企業輪廓。
SQL 查詢生成與回答準則:
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 語法、執行延遲與底層回傳的數據片段,消除對 AI 計算結果的黑箱疑慮。
資料與技術營運團隊的落地建議
- 優先對接標準化資料市集(Marts):建議將 Dust 指向經過 dbt 轉換後的 Gold 層寬表,而非原始 ODS/Bronze 接入層。結構清晰、命名規範的實體表能大幅提升 SQL 一次編譯的成功率。
- 在資料倉儲層落實欄位註解(COMMENT):善用 BigQuery 與 Snowflake 的 DDL 註解功能。完善的欄位註解能讓智能體自然理解業務縮寫(如
mrr、gmv、ltv),無需在 Prompt 中反覆堆疊重複說明。 - 嚴格管控運算成本:
- Snowflake 側配置專屬
XSMALL規格倉儲,並將AUTO_SUSPEND縮短至 300 秒以內; - BigQuery 側在專用服務帳號上設定專案層級單次查詢掃描位元組上限,防止大表全表掃描產生意外帳單。
- Snowflake 側配置專屬
- 混合編排非結構化與結構化數據:智能體可同時配置
Query Tables工具與基於非結構化文件的Search Data Source(RAG)工具。當分析營收變動的量化數據時,智能體能同時檢索 Google Drive 或 Notion 中的檢討報告,提供兼具數據與成因的完整業務洞察。