SQLFluff – Control de format per a SQL

June 10, 2026 by
SQLFluff – Control de format per a SQL
Jordi Isidro

Quan escrivim una consulta en SQL tan important és que funcioni correctament com que sigui llegible i mantenible en un futur. Per això cal establir uns estàndards a l’hora d’escriure les consultes per facilitar-ne la lectura.
Però, com validar que s’estan complint aquests estàndards?
Amb Linters de programari lliure com SQLFluff podem automatitzar aquesta validació, assegurant-nos que el codi que posem a producció compleix les normes de format.
Com utilitzar SQLFluff?

SQLFluff (https://www.sqlfluff.com/) s’instal·la com una llibreria python (https://pypi.org/project/sqlfluff/) i, mitjançant la definició d’unes regles al fitxer .sqlfluff, fa la validació dels fitxers que vulguem.

La comanda a executar per a validar un fitxer sql és:

sqlfluff lint <nom_del_fitxer>.sql

Aquesta comanda també permet posar wildcards per a analitzar més d’un fitxer a la vegada, incloses també subcarpetes.

SQLFluff busca el fitxer .sqlfluff a la carpeta on estem executant el lint com a les carpetes pare. Si una regla està definida més d’una vegada, prioritza aquella que està en una subcarpeta més propera a la carpeta d’execució.

Quines regles podem utilitzar a SQLFluff?

Les regles que podem fer servir les podem trobar en la següent documentació: https://docs.sqlfluff.com/en/stable/reference/rules.html

Algunes de les regles principals són:

  • max_line_length: llargària màxima de les línies de codi (ex. 120)
  • tab_space_size: mida dels espais que equivalen a un tabulador (ex. 4).
  • line_position: a on van les comes entre camps quan se separen per línies (ex. leading, si la coma va al davant).

SQLFluff també permet definir en quin dialecte està escrita la consulta i interpreta també codi jinja, cosa que ens és molt útil si tenim fitxers de DBT.

Amb SQLFluff també podem decidir ignorar algunes regles, o bé, rebaixar-les a nivell de warning.

exclude_rules = ST06,AM05,ST07
warnings = RF02

Fins i tot permet ignorar regles dins d’un fitxer concret, afegint --noqa: <regles> a les línies on no volem que s’apliqui. (https://docs.sqlfluff.com/en/stable/configuration/ignoring_configuration.html).

SQLFluff permet molta flexibilitat a l’hora de definir què volem validar, adaptant-se a cada tipologia de projecte i estàndards definits.

A continuació hi ha una possible configuració de .sqlfluff en postgres, amb línies de com a màxim 120 caràcters, amb les comes inicials on s’ignoren algunes regles i alguna es posa en warning.

[sqlfluff]
dialect = postgres
ignore = templating # evitar problemes amb dbt
max_line_length = 120

# ST06 ordre de les columnes: Select wildcards then simple targets before calculations and aggregates.
# AM05 ambiguous.join obliga a posar INNER JOIN en comptes de JOIN i LEFT/RIGHT OUTER JOIN en comptes de LEFT/RIGHT JOIN
# ST07 structure.using no permet fer joins amb USING
exclude_rules = ST06,AM05,ST07

# RF02 Unqualified reference 'nom_columna' found in select with more than one referenced table/view.
warnings = RF02

[sqlfluff:indentation]
tab_space_size = 4

# RF04 Keywords should not be used as identifiers. Ens passa amb les columnes year, month.
# Aquí podem posar els noms de columnes que sí que volem permetre
[sqlfluff:rules:references.keywords]
ignore_words = year,month

[sqlfluff:layout:type:comma]
line_position = leading

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

SQLFluff també es pot integrar en un sistema de CI/CD per tal d’assegurar que el codi pujat a producció compleix els estàndards definits per l’organització.

Aquest artícle ha estat possible gràcies a la trobada d’equips de dades de cooperatives l’ESS que vam fer al novembre (https://coopdevs.coop/blog/el-blog-de-coopdevs-1/trobada-dequips-de-dades-de-cooperatives-de-leconomia-social-i-solidaria-55).