用途
该技能旨在利用可用的只读工具回答用户的分析问题,支持从已连接的数据库中探索数据、进行跨数据库分析。源数据库和项目文件保持不变;在暴露的情况下,sql_materialize 可在临时仓库中创建会话本地表。
主要能力
- 探查:使用
warehouse_list、schema_inspect和小型sql_execute查询检查实际的键和文本,避免仅凭模式选择连接、转换或解析规则。 - 规划:明确总体、行粒度、分母、单位和关键假设,决定哪些连接和聚合层级能保持这些要素。
- 引擎内计算:在接近源的位置过滤和聚合,使用连接/CTE 或临时桥接派生大型中间集,而非将行复制到
IN (...)或VALUES中。 - 验证不变量:检查键唯一性、连接前后计数、缺失匹配和空值比例,使用
sql_check验证不变量和提取覆盖率。 - 跨引擎桥接:当两个源仓库已连接且临时仓库可用(使用 DuckDB)时,可通过两次
sql_materialize调用将数据暂存到临时仓库,再进行跨引擎查询。 - 处理扇出与空值:提供 SQL 模式检测重复键、连接前后的行数变化、未匹配行和空值比例,避免意外扇出。
- 处理大量相似表:针对 DuckDB 和 SQLite 提供生成 SQL 的方法(如
query_table、UNION ALL BY NAME或从sqlite_master构建语句),确保覆盖所有目标表且不重复。 - 批量语义标注后计数:定义固定评分标准和允许标签,将推断标签视为新数据,通过可用的允许摄入路径(如物化到临时仓库)转为关系,验证完整性后再计数。
- 读取溢出结果:当
sql_execute报告结果已保存到文件时,使用read检查 JSONL 路径,注意预览行数与实际匹配数的区别,必要时通过 SQL 投影/过滤恢复所需字段。
使用方式
- 检查数据:使用仓库列表、模式检查和小查询了解实际数据格式。
- 规划查询:简要说明总体、粒度、分母等。
- 在引擎内计算:尽量在源附近聚合,避免复制大量行。
- 验证不变量:检查键唯一性、连接计数、空值等。
- 给出答案:用一两句话解释依据(总体、粒度、注意事项),并以 Answer: 开头给出请求的值(带单位)。若证据或工具不足,以 Answer: unable to determine — <原因> 结尾,绝不猜测。
跨引擎桥接示例:
-- 物化 sales_db 的订单
source_warehouse: "sales_db", target_table: "orders_stage", sql:
SELECT order_id, LOWER(TRIM(customer_code)) AS customer_key, amount
FROM orders
WHERE status = 'paid'
-- 物化 crm_db 的客户
source_warehouse: "crm_db", target_table: "customers_stage", sql:
SELECT LOWER(TRIM(customer_code)) AS customer_key, region
FROM customers
然后在临时仓库中执行:
SELECT c.region, COUNT(*) AS paid_orders,
SUM(o.amount) AS total_amount, AVG(o.amount) AS mean_order_amount
FROM orders_stage AS o
LEFT JOIN customers_stage AS c ON c.customer_key = o.customer_key
GROUP BY c.region;
适用场景
- 从已连接数据库回答分析问题。
- 跨数据库分析(需临时仓库和物化工具)。
- 需要验证数据质量(键唯一性、空值、扇出)的分析任务。
- 处理大量结构相似的表(如按月份分区的订单表)。
- 批量语义标注后计数(需可用的摄入路径)。
限制
- 源数据库和项目文件保持只读,不修改。
- 跨引擎桥接需要两个源仓库已连接、临时仓库可用且使用 DuckDB、
sql_materialize已暴露。 - 若桥接不可用,需使用现有视图、联邦或已连接的引擎;否则应说明无法用现有工具完成跨引擎连接。
- 不得发明本地脚本/写入能力或手工转录大量键列表。
LIMIT不减少扫描字节,需选择必要列和分区过滤以控制成本。- 超时后应修改查询或沿穷尽、不相交的分区拆分工作;失败的查询不是零计数。
- 空总体比率未定义,不是零。
- 溢出文件可能受行数限制,无法恢复被连接器限制丢弃的行;应通过引擎内聚合获取精确总数。
- 批量标注的计数可复现,但分类本身不一定正确;需一致审查不确定案例。
- 若缺少持久化工具,小规模完整标注 CTE 仍可在只读查询中检查和计数;大规模任务需允许的摄入方式,否则应报告覆盖率限制。