首页/开发/代码质量与评审速查/SQLFluff:SQL 检查与格式化
规范与静态检查65 条

SQLFluff:SQL 检查与格式化

SQLFluff 是可配置的 SQL 检查与格式化工具:必须指定方言(--dialect,如 postgres/mysql),规则以 L 系列编号,支持自动修复。

SQLFluff 是什么

SQLFluff 是可配置的 SQL 检查与格式化工具:把 SQL 解析成语法树后按规则检查风格与结构,支持自动修复。必须指定方言(--dialect,如 postgres、mysql、bigquery),因为不同方言的关键字与语法差异很大。规则以字母数字编号,布局类规则前缀为 LT。它解决的是格式与结构一致性问题,不能替代逻辑评审。

基本信息

方言--dialect 必须指定(postgres / mysql / bigquery 等)
规则编号规则,布局类前缀 LT(如 LT01 空白、LT02 缩进)
修复sqlfluff fix 自动处理部分问题
模板默认 jinja 模板器;dbt 项目可切 dbt 模板器
配置.sqlfluff 文件声明方言、规则与排除路径

典型使用场景

  • 迁移脚本与建表语句入库前统一格式,评审只看逻辑不争格式
  • CI 中检查新增 SQL 文件,命中即失败
  • dbt 或自研数仓项目:用 dbt 模板器先渲染再检查
  • 把方言相关的写法问题提前暴露,减少上生产才发现的语法差异
  • 用 fix 批量规整历史 SQL,再人工复核 diff
  • 多套方言并存时按目录分别配置:同一个仓库里 Postgres 与 MySQL 脚本各用一份配置

用法

用法
sqlfluff lint migrations/ --dialect postgres
sqlfluff fix migrations/ --dialect postgres
sqlfluff lint --dialect mysql --format json reports/  # 结构化输出
sqlfluff parse query.sql --dialect postgres            # 排查模板渲染问题

# .sqlfluff 片段
# [sqlfluff]
# dialect = postgres
# templater = jinja

常用命令

命令作用使用建议
lint检查规则违规CI 门禁用,可输出 JSON
fix自动修复可修项修复后人工看一遍 diff
parse打印语法树模板渲染出错时用它定位
--dialect指定 SQL 方言必填,写进配置文件更省事
--exclude-rules排除指定规则对生成 SQL 目录单独配置
方言明确后误报率会明显下降:把方言猜错(例如把 BigQuery 的写法按 Postgres 检查)会产生大量看似莫名其妙的告警,团队很快就对结果失去信任。把它当成格式一致性工具,不要指望它替代逻辑评审。
对生成的 SQL 目录直接 lint 会得到一堆无法修复的告警:先把生成物排除,或为这些目录使用独立配置,避免真实问题被淹没。

易错点

  • 不指定方言:大量误报,团队失去信任并整体关闭检查
  • 对生成 SQL 目录直接 lint:先排除生成物或单独配置,否则真问题被淹没
  • fix 之后不看 diff:自动修复可能改变换行与缩进语义,SQL 拼接场景尤其要确认
  • 模板文件直接检查而忽略渲染:jinja 或 dbt 变量导致解析失败,需用对应模板器
  • 只在本地手动执行:没进 CI,漏检直到评审才发现,规则形同建议

数据来源与参考

  • SQLFluff 官方文档(docs.sqlfluff.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌