SQLFluff

一、SQLFluff 是什么?

SQLFluff 是一个​​开源的 SQL 代码质量工具​​,专注于通过自动化方式提升 SQL 代码的可读性、一致性和规范性。其核心功能包括:

  1. ​代码格式化​​:自动调整缩进、空格、换行等格式问题,支持多种 SQL 方言(如 ANSI、PostgreSQL、Snowflake 等)。
  2. ​语法检查​​:检测代码中的语法错误、命名规范问题(如表名/字段名是否符合规范)。
  3. ​规则定制​​:允许用户通过配置文件自定义规则,适配团队或项目的编码标准。
  4. ​与开发工具集成​​:支持 VS Code 扩展、dbt/Jinja 模板引擎,可嵌入 CI/CD 流程实现自动化检查。
适用场景
  • ​团队协作​​:统一多人开发的 SQL 代码风格,减少合并冲突。
  • ​代码审查​​:在数据工程、数据分析流程中提前发现潜在问题。
  • ​遗留代码重构​​:快速规范化历史 SQL 脚本,提升可维护性。

二、基础教程

1. 安装与初始化
# 安装 SQLFluff(Python 环境需 ≥3.6)
pip install sqlfluff# 初始化配置文件(生成 .sqlfluff)
sqlfluff init
2. 核心命令
命令功能说明示例
sqlfluff lint检查 SQL 文件的规范问题sqlfluff lint query.sql
sqlfluff fix自动修复可修正的格式问题sqlfluff fix query.sql
sqlfluff parse解析 SQL 并生成抽象语法树(AST)sqlfluff parse query.sql
3. 配置文件示例(.sqlfluff
[sqlfluff]
dialect = postgres  # 指定 SQL 方言
exclude_rules = L003, L009  # 排除特定规则[sqlfluff:rules]
capitalisation_policy = lower  # 关键字小写
indent_size = 4                # 缩进4空格
max_line_length = 120          # 最大行宽
4. 快速上手示例

​原始代码(test.sql)​

SELECT a+b AS foo,c AS bar FROM my_table

​检查问题​

sqlfluff lint test.sql --dialect postgres

输出:

== [test.sql] FAIL
L:   1 | P:   8 | LT01 | Expected only single space before 'AS' keyword
L:   1 | P:  11 | LT02 | First line should not be indented

​自动修复​

sqlfluff fix test.sql --dialect postgres

修复后代码:

SELECTa + b AS foo,c AS bar
FROM my_table

三、进阶功能

  1. ​多方言支持​
    通过 --dialect 参数切换数据库类型(如 bigquerysnowflake),适配不同平台的语法差异。

  2. ​与 dbt 集成​
    在 dbt 项目中直接运行 SQLFluff,检查模型文件中的 SQL 代码:

    dbt lint --sqlfluff
  3. ​自定义规则开发​
    可通过编写 Python 插件扩展规则,例如禁止使用特定函数:

    # 自定义规则示例(需放置于 .sqlfluff/rules 目录)
    from sqlfluff.core.rules import BaseRuleclass NoSelectStarRule(BaseRule):def _eval(self, segment, parent_stack):if segment.name == 'select_statement':if ' * ' in segment.raw:return LintResult(anchor=segment, description="禁止使用 SELECT *")

四、生产环境建议

  • ​CI/CD 集成​​:在 GitHub Actions 或 Jenkins 中添加 SQLFluff 检查步骤,阻止不规范代码合并。
  • ​团队规范文档​​:将 .sqlfluff 配置文件纳入版本控制,确保全员遵循统一标准。
  • ​定期重构​​:结合 sqlfluff lint --recursive 批量检查历史代码库。

通过本教程,您可以快速掌握 SQLFluff 的核心功能。如需深入规则定制或高级用法,可参考 官方网页。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91080.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盲盒抽卡机小程序系统开发:连接线上线下娱乐新桥梁

在互联网技术的推动下,线上线下融合已经成为娱乐行业发展的必然趋势。盲盒抽卡机,这一原本在线下备受欢迎的娱乐项目,通过小程序系统的开发,成功实现了线上线下的无缝对接,成为连接线上线下娱乐的新桥梁。盲盒抽卡机小…

【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验

标签:Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI 1 为什么会有这篇文章? 在本地调试 OpenAI 代理、数据抓取、私有服务、访问外网 时,经常会碰到如下报错: SSLCertVerificationError: [SSL: CERTIFICATE_VER…

VMWARE -ESXI-ntp时间同步无法启动异常处理

从服务界面查看NTP服务是停止的(手动启动无效)尝试到系统-时间设置-添加服务-网络时间协议,添加阿里云NTP服务器(网络可达) ntp.aliyun.com 点击确定报错-无法更改主机配置出现上面的情况多半是DNS没有设置ssh登录到服…

yolo11分类一键训练工具免安装环境windows版使用教程

这个是windows上用于yolo11分类训练工具,不需要写代码只需要按照要求摆放好分类图片文件夹就可以训练。软件内置cuda和python模块,因此不需要安装python环境和cuda就可以使用。注意需要电脑配备有nvidia显卡才能使用。要求显存>4GB。首先我们打开软件…

2025年-ClickHouse 高性能实时分析数据库(大纲版)

告别等待,秒级响应!这不只是教程,这是你驾驭PB级数据的超能力!我的ClickHouse视频课,凝练十年实战精华,从入门到精通,从单机到集群。点开它,让数据处理速度快到飞起,让你…

深入理解 Scikit-learn:机器学习实战的科学之道与避坑指南

掌握工具易,领悟其道难——本文带你穿透API表面,直击工业级机器学习实践的核心逻辑。作为一名长期耕耘在机器学习研究与工业应用一线的从业者,我见过太多因误用 sklearn 而导致的模型失效案例。从数据泄露到评估失真,从特征处理失…

Android 调试桥 (adb) 基础知识点

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与安卓手机进行通信。常用于辅助测试开发或定位问题。 一、adb的工作原理 🌟 启动服务器进程:检查是否adb服务器进程正在运行,若没有则启动。 启动或关闭adb服务&#xff…

AW2013 LED驱动芯片 工作方式介绍

根据您上传的 AW2013 芯片手册,我将为您分三个部分详细解读:一、芯片简介(AW2013 概述) AW2013 是一款 3 通道的 IC 控制恒流 LED 驱动芯片,支持以下功能:单通道最大恒流输出:15mA,支…

node.js中的fs与path模块

前言 什么是Node.js? Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎,即 Google Chrome 的核心。一、fs模块基础 1. 引入fs模块 const fs require(fs);2. 同步与异步方法 fs模块提供了同步和异步两种…

C# 静态类_静态方法_静态字段(static 声明静态的关键字 )

静态类里面的所有成员都必须得是静态的,是不能被实例化的(不能用对象调用),不能在静态类中声明实例(非静态)字段 属性 方法 静态方法中也只能访问静态字段, 普通方法中不管数据是不是静态都能使用1、定义一个静态类 //…

MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析

以下是针对MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析,结合技术特性与经济性指标:一、MRDIMM降低TCO的核心机制带宽效率提升 MRDIMM通过数据缓冲器实现双Rank并行传输,单次数据传输量从标准RDIMM的64字节提升至…

c# openxml 打开加密 的word读取内容

using System; using System.IO; using System.Linq; using System.Text; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing;/// <summary> /// 使用OpenXML获取文档内容&#xff0c;替代Aspose方式…

【SpringAI实战】ChatPDF实现RAG知识库

一、前言 二、实现效果 三、代码实现 3.1 后端代码 3.2 前端代码 一、前言 Spring AI详解&#xff1a;【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 实现一个非常火爆的个人知识库AI应用&#xff0c;ChatPDF…

Qt小组件 - 8 图片浏览器

一个自制的图片浏览器&#xff0c;如果不想安装qfluentwidgets&#xff0c; CommandBarView可以使用QWidgetQPushButton替代安装 qfluentwidgets pip install PySide6-Fluent-Widgets[full]代码示例 # coding: utf-8 from typing import Unionfrom PySide6.QtCore import Qt, Q…

R study notes[1]

文章目录introducing to Rreferencesintroducing to R R is an integrated suite involved data handling,storage facility,calculations on arrays,tools for data analysis and so on.running the command R in the terminal of OS can start R software.in R terminal ,to…

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程 在上一篇文章中&#xff0c;由于 Oracle 数据库的归档日志空间耗尽导致客户端无法连接数据库。在解决的过程中临时修改了归档路径。后来通过修改参数db_recovery_file_dest_size的值解决了问题。 但该操作导致DG无…

密码学与加密货币:构建去中心化信任的技术基石与未来挑战

密码学是加密货币的技术基石&#xff0c;两者通过数学原理构建去中心化信任体系。以下从技术原理、应用场景及未来挑战三方面展开分析&#xff1a;一、密码学基础&#xff1a;加密货币的安全基石非对称加密体系公钥与私钥&#xff1a;基于椭圆曲线密码学&#xff08;ECC&#x…

用于 Web 认证的 抗量子签名——ML-DSA 草案

1. 引言 本文描述了在 Web Authentication (WebAuthn) 中实现无密码认证&#xff08;Passwordless authentication&#xff09;的方法&#xff0c;该方法使用模块格&#xff08;Module-Lattice&#xff09;为基础的数字签名标准&#xff08;ML-DSA&#xff09;&#xff0c;即 …

ubuntu18.04解压大的tar.gz文件失败

1. 问题描述 我在vmware的虚拟机装有petalinux环境&#xff0c;需要解压downloads_2020.2.tar.gz这个大的压缩包文件&#xff0c;但是总是失败&#xff0c;而且过程很漫长 tar: downloads/git2/github.com.vim.vim.git/objects/pack/pack-f7f2e2add0c8972a9141b557ef725c38069…

App拉起:唤醒即达,告别繁琐操作

在移动互联网进入存量竞争的今天&#xff0c;“让用户少点一次、少等一秒”往往意味着20%以上的转化率差异。openinstall把这套体验总结成一套可落地的App拉起方案&#xff1a;一套SDK一组链接跳转规则一个可自定义的落地页&#xff0c;就能把Web→App的整条动线缩成一次点击。…