企业数据分析团队和技术运营团队经常面临一个普遍的协作瓶颈:业务人员需要大量的日常指标与临时报表支持,而传统的自服务 BI 工具门槛偏高,导致工单大量积压。然而,传统的检索增强生成(RAG)和非结构化文档知识库在此类场景下完全失效——语义搜索依赖于文本向量相似度,根本无法处理跨越数百万行记录的数值求和、聚合计算、分组过滤或留存比率统计。
Dust 通过其结构化数据集成能力与 Table queries(表查询) 功能彻底解决了这一痛点。Dust 无需搬迁或重复存储企业数据仓库中的业务数据,而是通过直接连接 Snowflake 与 Google BigQuery,提取并映射表模式(Table Schema)元数据,驱动智能体直接生成受控的只读 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 查询权限(单表或 Schema 内全量表)
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 & Admin > Service Accounts。
- 点击 Create Service Account,命名为
dust-warehouse-sa。 - 赋予至少两个必需的只读与计算执行 IAM 角色:
roles/bigquery.user:允许 Dust 提交查询作业(Query Jobs)、列出数据集元数据并使用计算资源。roles/bigquery.dataViewer:允许 Dust 读取表结构与行数据。
- 进入该服务账号的 Keys 标签页,点击 Add Key > Create new key > 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 中维护的表注释和列注释同步为智能体的元数据上下文,免去在 AI 提示词中二次定义指标口径的繁琐工作。
方案对比:Snowflake Connection 与 Snowflake Tool 如何选择?
针对 Snowflake,团队在工程落地时常需要权衡两种对接模式:
| 评估维度 | Snowflake Connection(托管连接) | Snowflake Tool(OAuth 工具模式) |
|---|---|---|
| 主要定位 | 面向企业业务人员的受控报表与指标自助问答 | 面向专业人员的动态 Schema 探索与即席视图查询 |
| 认证方式 | 集中式服务账号(Key Pair 密钥对或密码) | 个人用户 OAuth(跟随自身权限)或工作区统一 OAuth |
| 支持对象 | 仅支持物理表(排除所有视图) | 支持物理表、普通视图与物化视图 |
| 行数返回上限 | 单次查询最高支持 25,000 行 | 单次查询执行上限为 1,000 行 |
| 元数据探索 | 管理员在 Space 设置中预先筛选发布 | 智能体在运行时动态调用 list_schemas、describe_table 等工具 |
| 多语句 SQL 阻断 | 严格禁止多分号 SQL | 严格禁止多分号 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. 在指令中明确表间关联与口径边界
尽管大模型能够推断基本的数据类型,但在多表关联(JOIN)和行业专用统计口径上,明确的 Prompt 约束至关重要:
你负责解答业务团队关于经营指标的提问。你可以访问以下数仓表:
- 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 语法、运行耗时以及数仓底层返回的原始数据片段,确保核心指标统计无“黑盒”隐患。
数据与运营团队的落地实践建议
- 对接轻度汇总的明细宽表与数据集市(Marts):建议将 Dust 指向 dbt 处理后的 Gold 层业务宽表,而非原始 ODS/Bronze 接入层。结构清晰、命名规范的宽表能够极大提高 SQL 一次性生成成功率。
- 在数仓端夯实列注释与业务字典:充分利用 BigQuery 和 Snowflake 的 DDL 注释(COMMENT)。完善的元数据注释让智能体在无需额外维护长篇 Prompt 的情况下,即可天然识别复杂缩写(如
mrr、gmv、cac)。 - 精细化控制算力账单:
- Snowflake 侧使用专用的
XSMALL规格仓库,并将AUTO_SUSPEND限制在 300 秒以内; - BigQuery 侧在专用服务账号上配置项目级单次扫描字节配额,防范大表全表扫描带来的高昂账单。
- Snowflake 侧使用专用的
- 混合编排文档知识库与数仓表查询:智能体可同时挂载
Query Tables工具与基于文档的Search Data Source检索工具。在分析季度营收波动的定量数据时,智能体能同步检索 Notion 或云端硬盘中的复盘纪要,提供兼具数据与原因的完整业务解答。