Sqlfluff

O SQLFluff lê seus arquivos SQL (Structured Query Language · Linguagem de Consulta Estruturada) e aponta onde eles fogem do estilo combinado. Ele faz duas coisas: o lint mostra as violações sem tocar no arquivo, e o fix reescreve o arquivo corrigindo o que dá para corrigir sozinho. Com ele no pipeline, a discussão sobre caixa de palavra-chave e indentação sai da revisão de código.

Conceitos fundamentais

ConceitoO que é
SQLFluff (linter e formatter de SQL)Ferramenta Python que valida e formata SQL conforme dialeto e regras configuráveis
dialect (dialeto)SGBD-alvo: tsql, postgres, sqlite, bigquery; define palavras-chave e sintaxe aceita
rule (regra)Verificação individual identificada por código (L010, LT01); pode ser ativada ou silenciada
lint (análise de estilo)Detecção de violações sem alterar o arquivo; usado em CI para falhar o build
fix (correção automática)Reescrita do arquivo aplicando as regras corrigíveis; complementa o lint
template (template)jinja, dbt ou python; permite que SQLFluff entenda placeholders antes de analisar
.sqlfluff (arquivo de configuração)Configuração na raiz do projeto; define dialeto, regras ativas e exceções

Instalação

O SQLFluff é escrito em Python. Escolha a forma de instalar que combina com o seu ambiente:

# Python (recomendado para projetos com pipeline CI)
pip install sqlfluff

# Docker (sem Python instalado)
docker run --rm -v $(pwd):/sql sqlfluff/sqlfluff lint /sql

# VS Code
# Instale a extensão "SQLFluff" na marketplace (zero dependências locais)

Arquivo pronto para uso

Copie este .sqlfluff para a raiz do projeto e troque o dialeto pelo do seu banco. O dialect (dialeto) diz ao SQLFluff qual sintaxe aceitar: o tsql do SQL Server conhece TOP e @variavel, e o postgres conhece LIMIT e $$.

[sqlfluff]
dialect = tsql
max_line_length = 120

[sqlfluff:indentation]
indent_unit = space
tab_space_size = 2
indented_joins = false
indented_ctes = false

[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper

[sqlfluff:rules:capitalisation.identifiers]
extended_capitalisation_policy = pascal

[sqlfluff:rules:capitalisation.functions]
extended_capitalisation_policy = upper

[sqlfluff:rules:aliasing.table]
aliasing = explicit

[sqlfluff:rules:aliasing.column]
aliasing = explicit

[sqlfluff:rules:convention.select_trailing_commas]
select_clause_trailing_comma = forbid

Dialeto por banco

BancoDialeto
SQL Servertsql
PostgreSQLpostgres
MySQLmysql
SQLitesqlite

Comandos

# verifica arquivos
sqlfluff lint queries/

# corrige automaticamente
sqlfluff fix queries/

# arquivo único com dialeto explícito
sqlfluff lint script.sql --dialect tsql

Regras e convenções cobertas

Regra SQLFluffConvenção do guia
capitalisation.keywordsKeywords em UPPER (SELECT, FROM, WHERE)
capitalisation.identifiersIdentificadores em PascalCase
capitalisation.functionsFunções em UPPER (COUNT, GETDATE)
aliasing.tableSem aliases de letra: nome completo da tabela
aliasing.columnAlias explícito com AS
max_line_length = 120Sem linhas longas
indented_joins = falseJOIN alinhado com FROM, sem indentação extra
Note

O SQLFluff cobre parte das convenções deste guia. A formatação vertical, a ordem das cláusulas e o uso de CTEs continuam por conta da revisão humana, ou de regras personalizadas que você escreva.

DoDocs v3.7.0 · Desenvolvido por @thiagocajadev · Baseado no trabalho de pmndrs/docs · Poimandres.