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
英文地址,請注明出處:http://en.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的整條動線縮成一次點擊。…