Lorsque j'interviens chez mes clients, deux situations se présentent :
- Mon client ne possède pas de Data Platform et je dois tout construire en posant des bases solides pour garantir une reprise facile du projet.
- Un projet existe déjà, et je dois alors passer par une phase de reprise et de compréhension du code existant.
Cette phase peut être complexe, car peu d'entreprises imposent des règles de formatage pour leurs modèles dbt ce qui rend les différents modèles peu lisibles. Pourtant, un formatage cohérent est fondamental pour garantir la lisibilité et la maintenailité du code. C'est tellement important que c'est l'une des premières choses que je mets en place lorsque je construis une Data Platform from scratch.
Dans cet article, je vous présente SQLFluff, l'outil que j'utilise pour standardiser le formatage du code SQL, et vous explique comment l'intégrer efficacement dans un projet dbt.
SQLFluff : un linter SQL puissant
SQLFluff est un linter SQL permettant de définir et d'appliquer des règles de formatage aux requêtes. Son utilisation repose sur deux aspects principaux :
- La configuration des règles de formatage via un fichier de configuration
- L'exécution des commandes SQLFluff pour valider et corriger automatiquement le formatage du code
Cet outil est devenu indispensable dans mes projets, car il améliore significativement la qualité du code et la productivité des équipes. Les revues de code sont plus efficaces, la maintenance est simplifiée et l'onboarding des nouveaux membres est accéléré.
Pourquoi utiliser SQLFluff ?
SQLFluff offre de nombreux avantages dans les projets dbt :
- Standardisation du code : Tous les développeurs respectent les mêmes conventions, ce qui facilite la relecture et la maintenance.
- Réduction des erreurs : Certains problèmes de syntaxe ou de formatage sont détectés en amont.
- Gain de temps en revue de code : Moins de discussions sur la forme, plus de focus sur le fond.
- Meilleure intégration des nouveaux développeurs : Une base propre et claire permet une prise en main plus rapide.
Exemple d'utilisation
Imaginons une requête SQL mal formatée :
SELECT id, name, email FROM users WHERE status='active' ORDER BY created_atESC;
SQLFluff permet de la reformater proprement :
SELECT id,
name,
email
FROM users
WHERE status = 'active'
ORDER BY created_at DESC;
Configuration de SQLFluff
La première étape consiste à définir la configuration de SQLFluff. Bien que l'outil propose des règles par défaut, vous voudrez probablement les personnaliser en fonction des besoins de votre projet.
Cette configuration se fait via un fichier .sqlfluff
, qui centralise tous les paramètres de formatage.
Format du fichier de configuration
Voici un exemple de structure pour ce fichier de configuration :
# Configuration générale de SQLFluff
[sqlfluff]
dialect = bigquery # Définit le dialecte SQL utilisé (ici BigQuery)
templater = dbt # Utilise le templater dbt pour gérer les macros Jinja
max_line_length = 120 # Définit la longueur maximale d'une ligne
rules =
LT01,LT02,LT04,LT06,LT07,LT08,LT09,LT10,LT11,
CP01,CP02,CP03,CP04,CP05,
JJ01 # La liste des règles à appliquer
# Configuration spécifique des règles
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper # Impose que tous les mots-clés soient en majuscule
Toutes les règles sont documentées sur le site de SQLFluff. Il est important de noter qu’un fichier de configuration par défaut existe et que les paramètres que vous définissez viennent uniquement remplacer ces valeurs par défaut.
Il n’existe pas de standard absolu pour le formatage des requêtes SQL. Certaines entreprises écrivent les mots-clés en minuscule, d'autres en majuscule. Certaines mettent les virgules en fin de ligne dans un SELECT
, d'autres en début (on ne juge pas …). L'essentiel est d'assurer une cohérence dans toutes vos requêtes.
Intégration de SQLFluff dans un projet dbt
SQLFluff est un outil très utile au quotidien, car il permet aux développeurs de formater facilement leur code selon les règles de l'organisation. Voyons comment bien l'intégrer dans un projet dbt.
SQLFluff dans dbt Cloud
Avec dbt Cloud, l'intégration de SQLFluff est très simple. Lorsque vous travaillez sur un modèle, un bouton "Format" est disponible parmi les actions possibles. Par défaut, dbt utilise sqlfmt
, un autre linter moins configurable que SQLFluff.
Pour utiliser SQLFluff à la place, il suffit de créer un fichier .sqlfluff
à la racine du projet. Une fois ce fichier en place, dbt comprendra qu'il doit utiliser SQLFluff pour formater le code.
SQLFluff avec dbt Core
Avec dbt Core, SQLFluff doit être installé avant de pouvoir être utilisé (Python 3 est requis) :
pip install sqlfluff sqlfluff-templater-dbt
Ensuite, pour formater un modèle (ou un ensemble de modèles), il suffit d'utiliser la commande suivante :
sqlfluff fix models/marts/core/dim_customers.sql
À retenir
- SQLFluff est un outil puissant pour assurer la cohérence et la qualité du code SQL.
- Son intégration dans un projet dbt permet de normaliser le formatage, d'éviter les erreurs et d'améliorer la lisibilité du code.
Conclusion
SQLFluff est un outil indispensable pour garantir une qualité de code optimale dans vos projets dbt. Son intégration peut sembler contraignante au début, mais elle apporte une rigueur et une standardisation bénéfiques à toute équipe travaillant sur des modèles de données SQL.
En adoptant ces bonnes pratiques, vous améliorez la collaboration et facilitez la maintenance à long terme. 🚀
Afin de tirer pleinement parti de cet outil, il peut être intéressant d'ajouter une étape dans la CI/CD pour s'assurer que tout le code poussé sur la branche master respecte les règles de formatage définies par votre organisation. Nous explorerons ce sujet dans un prochain article !