订阅更新

你平时怎么用AI写代码?AI写的SQL你敢直接上线吗?

Agent手册 第 17 题 约 10 分钟读完

本文目录
  1. 30秒版回答
  2. 面试官在考什么
  3. 展开一:我在哪些环节用 AI
  4. 展开二:给 AI 好的上下文,质量差距巨大
  5. 展开三:AI 生成 SQL 的典型错误——评审清单
  6. 展开四:验证流程——让流程兜底
  7. 实战经验:SQL 代码质量治理
  8. 追问链
  9. 加分说法 vs 减分说法
  10. 怎么挂到你的项目上
  11. 总结

30秒版回答

我日常大量在用,主要在三类场景:写 SQL 和脚本的初稿、读懂陌生代码和排查报错、写测试、文档和数据质量规则。用的时候我会先给它足够的上下文:表结构、粒度、分区、口径和团队规范,上下文越完整,生成的质量越高。

但 AI 写的 SQL 我不会直接上线,而是和人写的代码走同一套流程:代码评审、测试、数据验证。评审时我会重点看几类 AI 容易出错的地方:Join 导致的行数放大、NULL 处理、时区和切日、去重口径、分区过滤。上线前跑数据对比,核心指标和旧逻辑或者已知结果对得上才合并。

一句话:AI 负责提速,人负责正确性,流程负责兜底。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

面试官:「现在大家都在用 AI 写代码。你平时是怎么用的?AI 写的 SQL,你敢直接上线吗?」

这道题看似随意,其实是一道很精准的筛选题。面试官想通过它同时判断两件事:你有没有在真正使用 AI 提效(不用的人在今天会显得落伍),以及你有没有对 AI 产出的把关能力(只会用不会审的人更危险)。

最差的两种回答是:“我基本不用 AI,自己写更放心”和“现在 AI 写的 SQL 基本都是对的,我直接用”。前者显得跟不上时代,后者显得没有责任心。正确的姿态是:大量使用,严格把关,并且能说清楚把关的具体方法。

面试官在考什么

• 是否真的在日常工作中使用 AI,用在哪些环节,怎么用的。

• 是否清楚 AI 生成 SQL 的典型错误模式。

• 是否有一套验证方法:评审清单、测试、数据对比。

• 是否会给 AI 提供好的上下文:表结构、口径、团队规范。

展开一:我在哪些环节用 AI

环节怎么用效果特点注意事项
SQL/脚本初稿给出需求、表结构、口径,让它写初稿提速明显逻辑必须人工审
读代码让它解释陌生的老 SQL、存储过程理解成本大幅降低关键结论回到代码核实
排查报错贴错误栈和相关代码,让它分析可能原因常见报错定位快复杂问题仍需自己验证
写测试和质量规则根据表结构和口径生成测试用例覆盖面更全检查用例是否真的覆盖了边界
写文档和注释根据代码生成表说明和字段注释省时间业务含义需要人确认
方言迁移Hive 转 Spark SQL 等重复劳动大幅减少必须双跑对数

回答这部分时,一定要说具体场景,不要只说“我经常用 AI 写代码”。最好能说出一个具体的例子:用 AI 读懂了一个几百行的老 SQL,或者让它帮忙生成了一批数据质量规则。

展开二:给 AI 好的上下文,质量差距巨大

同样一个需求,只说“帮我写一个统计复购率的 SQL”,和给出完整上下文,生成的质量完全不在一个水平。我会把团队的规范和常用表信息整理成一份项目级的说明文件,让编码助手每次都能读到:

Markdown

# 数仓开发规范(给 AI 编码助手读的项目说明)
## 分层与命名
- 只允许读取 dwd/dws/dim 层;禁止直接读 ods 层做统计
- 表命名:{层}_{主题}_{内容}_{周期},如 dws_trade_order_d
## 必须遵守
- 所有大表查询必须带分区条件 dt
- 禁止 SELECT *;Join 前先确认两边粒度,防止行数放大
- 时间统一用站点当地时间切日:使用 site_local_date 字段,不要自己转换时区
- 去重统计用户用 user_id,不要用 device_id
- 金额字段单位为分,输出时转换为元
## 常用表
- dws_trade_order_d:一个订单一行,主键 order_id,已剔除测试账号
- dim_user:一个用户一行,主键 user_id,拉链表,取当前用 is_current=1

这份文件的思路和第 07 题给 Agent 做语义层是一样的:AI 不知道你们团队的隐性规范,你得告诉它。写好这份文件,不仅提升 AI 生成质量,对新同事也同样有用。

展开三:AI 生成 SQL 的典型错误——评审清单

这部分是这道题的核心得分点。能说出 AI 容易在哪里出错,说明你是真的审过大量 AI 生成的代码:

错误类型典型表现怎么检查
Join 行数放大一对多 Join 后直接 SUM 金额确认每个 Join 两边的粒度和关联键
NULL 处理NOT IN 子查询含 NULL、COUNT(列) 忽略 NULL检查 NOT IN、COALESCE、条件判断
时区与切日直接用 UTC 时间戳截取日期检查日期字段来源和时区
去重口径COUNT DISTINCT 用错字段,多列拼接去重对照指标口径定义
分区过滤漏掉分区条件,或分区条件写在 Join 之后失效看执行计划扫描的分区数
窗口函数ROWS 和 RANGE 混用、排序不稳定检查 ORDER BY 是否有唯一性
看似合理的字段用 create_time 而不是 pay_time 统计成交核对字段业务含义
-- AI 生成的典型问题:订单 Join 明细后直接汇总订单金额
SELECT o.dt, SUM(o.order_amount) AS gmv          -- ✘ 一个订单多条明细,金额被放大
FROM dws_trade_order_d o
JOIN dwd_order_item_d i ON o.order_id = i.order_id
WHERE o.dt = '2026-10-10' AND i.category = '耳机'
GROUP BY o.dt;
 
-- 修正:先在明细粒度过滤,再按订单去重后汇总
SELECT o.dt, SUM(o.order_amount) AS gmv
FROM dws_trade_order_d o
WHERE o.dt = '2026-10-10'
  AND EXISTS (SELECT 1 FROM dwd_order_item_d i     -- 用 EXISTS 避免行数放大
              WHERE i.order_id = o.order_id
                AND i.dt = '2026-10-10' AND i.category = '耳机')
GROUP BY o.dt;

这段 SQL 是很好的面试素材:语法完全正确,跑得也很快,结果却是错的。这正是 AI 生成代码最危险的地方——它的错误不会以报错的形式出现。

展开四:验证流程——让流程兜底

评审清单靠人,人会疲劳。所以还要有自动化的验证:

• 数据测试:主键唯一、非空、取值范围、参照完整性,每个新表和改动都要有。

• 数据对比:改造类需求,新旧逻辑在同一批数据上双跑,对比行数、主键、核心指标汇总。

• 基准值核对:新指标和已知可信来源(财务报表、看板)核对。

• 执行计划检查:扫描分区数、Shuffle 数据量是否在合理范围。

• 小步提交:AI 生成的大段代码拆成小的改动分别评审,避免一次几百行看不过来。

# 数据测试示例(类 dbt 写法):AI 生成的模型必须通过才能合并
models:
  - name: dws_user_repurchase_d
    tests:
      - row_count_change: {max_ratio: 0.3}      # 行数日环比波动超 30% 告警
    columns:
      - name: user_id
        tests: [not_null, unique]               # 粒度:一个用户一行
      - name: repurchase_rate
        tests:
          - accepted_range: {min: 0, max: 1}    # 比率必须在 0-1 之间

实战经验:SQL 代码质量治理

我在某短剧出海公司做过 SQL 代码质量治理。SQL 风格各异、同一个口径多种写法,是很多数据团队的通病,Join 放大、漏分区这类问题也由此而来。这类治理的核心无非三件事:统一编码规范、建立评审清单、给核心表补数据测试。

这套机制在 AI 编码普及之后反而更重要了。AI 写代码的速度远超人工评审的速度,如果没有规范、清单和自动化测试,代码质量只会更难控制。所以我的观点是:AI 编码时代,团队的工程规范和测试体系不是可有可无,而是必需品。

追问链

追问一:你觉得用了 AI 之后,你的开发效率提升了多少?

这道追问要诚实回答,并且说出度量方式。比如“写新 SQL 的初稿时间明显缩短,但评审和测试的时间没有减少,甚至因为要更仔细地审 AI 的代码而有所增加,整体看需求交付周期缩短了一些”。不要报一个夸张的数字(比如“效率提升 10 倍”),面试官会追问怎么算的。具体怎么量化见第 20 题。

追问二:有没有遇到过 AI 生成的代码出问题的情况?

最好准备一个真实的例子:AI 生成的 SQL 哪里错了、你是怎么发现的、后来怎么避免的。比如“AI 把订单表和明细表 Join 后直接汇总订单金额,数字偏大,是在核对看板时发现的;之后我把‘Join 前确认粒度’写进了项目说明文件和评审清单”。有发现、有改进,说明你有把关能力和闭环意识。

追问三:团队里有人完全依赖 AI、不审代码,你怎么看?

我会从机制上解决,而不是指责个人。代码合并必须经过评审和自动化测试,这条规则对人写的代码和 AI 写的代码一视同仁。同时把 AI 常见的错误模式整理成清单分享给团队,让大家知道该重点看哪里。责任在提交代码的人,不管代码是谁写的。

加分说法 vs 减分说法

✔ 加分说法✘ 减分说法
大量使用,说得出具体场景我不太用 AI,自己写更放心
给 AI 完整上下文:表结构、口径、规范AI 写的基本都对,直接用
能列出 AI 生成 SQL 的典型错误说效率提升了 10 倍但说不出怎么算
AI 代码和人写代码走同一套评审测试只说用了某某工具,说不出怎么用
AI 提速,人负责正确性,流程兜底出了问题怪 AI

怎么挂到你的项目上

话术模板:“我日常写 SQL 初稿、读老代码、写测试都会用 AI,用之前会给它团队的规范文件和表结构。但 AI 写的 SQL 我不会直接上线,会重点检查 Join 粒度、NULL、时区切日、去重口径和分区过滤,并且通过数据测试和双跑对比。我之前做过 SQL 代码质量治理,深知没有规范和测试兜底,写得越快问题越多。”

如果你有被 AI 坑过的真实例子,一定要讲出来,这比任何方法论都有说服力。

总结

这道题的标准姿态是大量使用、严格把关、流程兜底。能说出具体使用场景、能列出 AI 生成 SQL 的典型错误、能讲清楚验证流程,就证明你既拥抱了 AI,又保持了专业判断。记住那句话:AI 的错误不会以报错的形式出现。

下一篇聊很多人最关心的问题:没做过大模型项目,怎么讲自己在 Agent 方向的经验?

你用 AI 写代码,被坑过最惨的一次是什么?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器