运维工程师用 AI 写 SQL 查询:用自然语言生成查询语句
负责服务器、发布流水线、监控告警和故障处理的运维或 SRE,日常工作里告警多、脚本杂、变更文档和故障复盘写起来费时,夜间排障时更需要快速理清思路。很多人知道要查什么数据,但写 SQL 时卡在关联、分组和窗口函数上。这篇文章用一个完整的例子演示运维工程师如何借助 AI 写 SQL 查询:提供表结构和字段含义,用自然语言描述需求,让 AI 写 SQL 并解释每一步,再用小范围数据验证。
典型场景
运维工程师需要从数据库里查“告警记录”相关的数据:按主机组统计最近一个月的持续分钟,还要和上个月对比。数据团队排期很满,自己写 SQL 又总是出错。现实中,运维工程师还得兼顾“完成两台数据库服务器的磁盘扩容”等日常事务,所以更需要一套拿来就能用的方法。
用什么工具
可以用 ChatGPT、Claude、DeepSeek 等对话助手,也可以用数据库客户端或 BI 工具内置的 AI 查询功能(如 DataGrip、DBeaver 的 AI 助手,以及不少 BI 平台的自然语言查询)。
案例:一次完整的使用过程(虚构)
我们用一个虚构人物把流程串起来:小郑,运维工程师,最近在忙“推进日志集中采集”。一次故障复盘会结束后,小郑意识到需要尽快写 SQL 查询,可当天还要处理“完成两台数据库服务器的磁盘扩容”。于是小郑把要求和背景一次性写进提示词,让 AI 先出一版,再花时间修改关键部分。最后交给技术负责人的版本,结构和措辞都是小郑亲自把过关的。
分步操作
- 提供表名、字段名、字段类型和含义,不需要真实数据
- 说明数据库类型,例如 MySQL 8 或 PostgreSQL
- 让 AI 解释 SQL 的每个部分
- 先加 LIMIT 在测试库或小范围运行,核对结果
提示词示例
提示词的关键是把背景、要求和输出格式写清楚:
【背景】最近在处理“把发布流水线的构建时间缩短约三分之一”,同时要准备“推进日志集中采集”。
数据库:MySQL 8.0
表 records(告警记录),字段:
- id:主键
- category:主机组,文本
- record_date:告警日期,DATE
- amount:持续分钟,数值
- type:告警级别,文本
需求:
1. 统计 2026 年 10 月每个 category 的 amount 合计和记录数
2. 同时给出 9 月的合计,以及环比变化百分比
3. 按 10 月合计从高到低排序
请写出 SQL,并逐段解释;如果 9 月没有数据,环比显示为 NULL。
效果示例(虚构演示)
以下是一段示意性的输出,内容基于虚构的工作记录,仅用于展示格式和思路,实际结果会因工具和输入不同而变化:
WITH m AS ( SELECT category, SUM(CASE WHEN record_date >= '2026-10-01' AND record_date < '2026-11-01' THEN amount END) AS oct_total, COUNT(CASE WHEN record_date >= '2026-10-01' AND record_date < '2026-11-01' THEN 1 END) AS oct_cnt, SUM(CASE WHEN record_date >= '2026-09-01' AND record_date < '2026-10-01' THEN amount END) AS sep_total FROM records WHERE record_date >= '2026-09-01' AND record_date < '2026-11-01' GROUP BY category ) SELECT category, oct_total, oct_cnt, sep_total, ROUND((oct_total - sep_total) / NULLIF(sep_total, 0) * 100, 1) AS mom_pct FROM m ORDER BY oct_total DESC;解释:先用条件聚合一次算出两个月的数据,NULLIF 避免除以 0,WHERE 限定时间范围以利用日期索引。
拿到类似的结果后,小郑的做法是先核对事实和数字,再结合“推进日志集中采集”的安排调整重点,最后才对外使用。
避坑指南
- 表结构描述越准确,SQL 越可用;字段含义不清时 AI 会猜。
- 不要把含有服务器 IP、账号口令、证书私钥和内部拓扑的查询结果交给公共 AI 工具。
给运维工程师的特别提醒
排障时把日志片段、时间线和最近变更一起提供,让 AI 帮你列排查顺序。同时要记住:涉及删除、重启、改权限的命令,必须先确认影响范围并做好回滚准备,不能照抄执行。
再补充一条经验:让 AI 写的命令先在测试环境执行,并要求它说明每个参数的作用。
变体用法
- 优化慢查询:附上执行计划,让 AI 给出索引和改写建议。
- 生成测试数据:让 AI 写插入语句,构造用于验证的样例数据。