SuperAPI AI 工具集

sql-sentinel

数据与分析

查看项目

更新于 10-16 06:43

技能介绍

用途:sql-sentinel 是一款静态分析技能,用来自动审计 SQL 中常见的成本与性能反模式,帮助数据分析工程师、数据平台团队及任何在 SQL 上线前做评审的人,识别会推高数仓账单的写法。它面向 BigQuery、Snowflake、Redshift、Postgres,并可用于 Spark SQL 相关的编写与评审场景;零依赖,MIT 许可。

主要能力:引擎将 SQL 脚本按语句拆分(正确处理引号与注释),对每条语句运行 20 条规则,按严重程度加权打分(critical 25、high 12、medium 5、low 1),给出 0-100 健康分与 A-F 等级,并输出按优先级排序的降本计划,每个发现都附带原因、具体修复建议和预估节省。规则覆盖 SELECT *、无 WHERE 全表扫描、非 sargable 的 LIKE 与函数列、CROSS JOIN/逗号连接、NOT IN 的 NULL 陷阱、无 LIMIT 的 ORDER BY、隐式类型转换、COUNT(DISTINCT)、UNION 与 UNION ALL、无 PARTITION 的窗口函数、无 WHERE 的 DELETE/UPDATE 等。

使用方式:需先安装或克隆源码仓库,并选择经过审阅的提交、标签或发布版本再运行,不要直接运行可变默认分支代码: git clone https://github.com/takeaseatventure/sql-sentinel.git cd sql-sentinel git checkout <reviewed-commit-or-tag> node scripts/sql-sentinel.js path/to/query.sql 也可编程调用(require('./scripts/sql-sentinel') 后使用 auditSql,传入 { dialect: 'bigquery' }),读取 healthScore、grade 与 prioritizedPlan。测试:cd scripts && node test.js。

适用场景:查询编写或评审、排查“查询为什么慢/账单为什么高”、仪表盘查询或 dbt 模型上线前检查、代码评审前的二次审视,以及 FinOps/降低云支出行动。

限制:它是静态分析器,只从 SQL 文本中找反模式,不读取执行计划、行数或账单;被标记的查询在小表上开销很低,在大表上才是真正问题。事实表启发式(SQL015)依据表名(_events、_log)判断,仅为提示性结论。它不执行 SQL,因此可安全用于任意 .sql 文件。