Refactorise des modèles dbt en analysant l'impact downstream. Utiliser quand : (1) Tâche mentionne "refactor", "restructure", "extract", "split", "reorganize" (2) Extraction de CTEs en modèles intermédiaires ou création de macros (3) Modification de modèles qui ont des consommateurs downstream (4) Renommage de colonnes, changement de types, réorganisation des dépendances Analyse TOUTES les dépendances downstream avant de toucher quoi que ce soit.
Trouver TOUTES les dépendances downstream avant de modifier. Refactorer par petites étapes.
cat transform/models/<layer>/<model>.sql
Identifier : CTEs > 50 lignes, logique répétée, jointures multiples.
grep -r "ref('<model>')" transform/models/ --include="*.sql"
Signaler à l'utilisateur : "X modèles downstream affectés : [liste]"
grep -E "alias\.\w+" transform/models/gold/<downstream>.sql
| Symptôme | Action |
|---|---|
| Modèle > 200 lignes | Extraire des CTEs en modèles séparés |
| Même logique dans 3+ modèles | Créer une macro dans transform/macros/ |
| 5+ jointures dans un modèle | Créer des modèles intermédiaires |
Self-join CTE avec curr.* | Remplacer par lagInFrame (bug ClickHouse) |
-- transform/macros/null_guard_median.sql
{% macro null_guard_median(col, min_count=5) %}
multiIf(count() >= {{ min_count }}, round(quantile(0.5)({{ col }}), 0), NULL)
{% endmacro %}
docker compose build dbt && docker compose up dbt
curl "http://localhost:8124/?query=SELECT+count()+FROM+gold.<model>"