SuperAPI AI 工具集

wren-sql

数据与分析

查看项目

更新于 10-15 20:10

技能介绍

用途:Wren Engine 在执行 SQL 前会先经过语义层(MDL,模型定义语言)转换,因此 SQL 必须针对 MDL 中的模型名,而不能直接引用底层数据库表。本技能用于编写和修正针对 Wren Engine 的 SQL 查询。

主要能力:覆盖 MDL 查询规则、过滤策略、数据类型(ARRAY、STRUCT、JSON/VARIANT)、日期时间函数与间隔、BigQuery 方言差异及 SQL 错误诊断与纠正。技能内含版本检查机制:静默获取 https://raw.githubusercontent.com/Canner/wren-engine/main/skills/versions.json,与本地版本比较;若远端较新,先提示用户,可用 npx skills add Canner/wren-engine --skill wren-sql --agent claude-code 更新,之后照常继续工作流。

核心规则:只允许 SELECT,不支持 DELETE/UPDATE/INSERT;只能使用 MDL 中定义的模型、视图与列,不能引用原始数据库表;生成的 SQL 不写注释;优先使用 CTE 而非子查询;标识符大小写敏感,含 unicode、除 _ 外特殊字符或以数字开头时用双引号,例如 "客户"."姓名"、"table-name"."col"、"123column";标识符用双引号,字符串字面量用单引号。

查询写法:日期查询用范围,如 WHERE ts >= CAST('2024-11-01 00:00:00' AS TIMESTAMP WITH TIME ZONE) AND ts < CAST('2024-11-02 00:00:00' AS TIMESTAMP WITH TIME ZONE);排名用 DENSE_RANK() 加 WHERE,并在 SELECT 中保留排名列;避免相关子查询,改用 JOIN;可能失败的转换用 SAFE_CAST(col AS INT)。

过滤策略:文本用 LIKE '%value%' 做部分匹配;数值用 BETWEEN 30 AND 40;日期/时间戳用 >= '2024-01-01' AND < '2024-02-01';精确值用 = 或 IN (...);主键/索引列优先用等值(=)。

聚合与排序:所有非聚合 SELECT 列都必须出现在 GROUP BY 中(窗口函数除外),聚合条件放 HAVING 而非 WHERE,长列名可用序号 GROUP BY,如 GROUP BY 1;排序用 ORDER BY,限制行数用 LIMIT;当 ORDER BY 出现在子查询或 CTE 中时必须带 LIMIT。

子查询:优先 CTE;SELECT 中的子查询每行须返回单值;WHERE 子查询用 IN、EXISTS 或比较运算符;JOIN 条件中不支持 IN SUBQUERY,改用 JOIN ... ON;不支持 RECURSIVE CTE。计算字段:MDL 中标记为 Calculated Field 的列已有预定义计算逻辑,应直接使用,不要重新实现,可读取列注释(如 column expression: avg(reviews.Score))理解含义。

支持的类型转换:bool、boolean、int、integer、bigint、smallint、tinyint、float、double、real、decimal、numeric、varchar、char、string、text、date、time、timestamp、timestamp with time zone、bytea。使用前建议检查 dataSource 字段以识别后端并应用对应方言规则。

适用场景:在 Wren Engine 语义层上编写分析查询、排查和纠正 SQL 错误、处理复杂数据类型与日期时间、适配 BigQuery 等后端方言。

限制:不支持写操作;不能直接查询底层表;不支持 RECURSIVE CTE;JOIN 条件中不支持 IN SUBQUERY;ORDER BY 出现在子查询或 CTE 中必须加 LIMIT。其他未在资料中说明的限制暂未提供。