Skip to content

data transformation for DossierFacile using DBT framework

License

Notifications You must be signed in to change notification settings

MTES-MCT/dossierfacile-data

Repository files navigation

dossierfacile-data

License DBT Startup d'État

Pipeline de transformation de données pour DossierFacile.

Table des matières

Présentation

Ce projet fait partie de l'écosystème DossierFacile et gère la transformation des données via DBT. Il permet de :

  • Transformer et modéliser les données en provenance de notre application en production
  • Assurer la qualité des données via la mise en place d'une modélisation et des tests
  • Générer des analyses directement consommables par Metabase

Architecture

Le projet suit une architecture DBT standard avec les composants suivants :

  • models/ : Modèles de données principaux
  • macros/ : Fonctions réutilisables
  • seeds/ : Données de référence
  • tests/ : Tests de données

Structure des modèles

Les modèles sont organisés en 3 couches techniques :

  • Staging : Première couche de transformation des données brutes

    • tenant (locataire)
    • owner (propriétaire)
    • operation (opérations sur les dossiers)
    • document
  • Core : Modèles métier enrichis et normalisés

    • tenant
    • owner
    • operation
    • document
  • Analytics : Modèles d'analyse et de reporting prêts à être utilisés par Metabase

Installation

Prérequis

  • Python 3.10+
  • PostgreSQL 15+
  • DBT Core 1.9.0+
  • Accès à la base de données DossierFacile

Installation des dépendances

# Création de l'environnement virtuel
python -m venv .venv
source .venv/bin/activate

# Installation des dépendances
pip install dbt-core dbt-postgres

Configuration

Configuration de DBT

  1. Créez un fichier profiles.yml à la racine du projet :
dossierfacile:
  target: dev
  outputs:
    dev:
      type: postgres
      host: {{ host }}
      user: {{ user}}
      password: {{ password }}
      port: {{ port }}
      dbname: {{ database }}
      schema: {{ schema }}
      threads: 3
  1. Remplacez les valeurs {{}} avec celles du secret "user SQL df-data dbt_dev" dans vaultwarden.

  2. Testez la connexion :

dbt debug

Configuration de Sqlfluff

pip install sqlfluff sqlfluff-templater-dbt

Utilisation

Commandes principales

# Exécution complète
dbt run

# Exécution d'un modèle spécifique
dbt run -s model_name

# Tests unitaires
dbt test -s test_type:unit

# Génération de la documentation
dbt docs generate
dbt docs serve

Linting SQL

# Vérification
sqlfluff lint

# Correction automatique
sqlfluff fix

Tests

Types de tests dans DBT

1. Tests simples (Singular Tests)

Ces tests sont définis directement dans le fichier YAML du modèle et vérifient des contraintes basiques :

version: 2

models:
  - name: core_tenant_account
    columns:
      - name: id
        data_tests:
          - unique
          - not_null:
              config:
                where: "id is not null"
  • unique : Vérifie que chaque valeur de la colonne est unique
  • not_null : Vérifie qu'aucune valeur n'est NULL
  • accepted_values : Vérifie que les valeurs sont dans une liste prédéfinie

Il est également possible d'étendre ces capacités de tests avec des tests génériques custom

2. Tests unitaires (Unit Tests)

Tests plus complexes qui vérifient la logique de transformation des données. Exemple avec le test core_tenant_account.test.yml

Différences entre les types de tests

  1. Tests simples/generic

    • Vérifient des contraintes basiques sur les colonnes
    • Faciles à mettre en place
    • Exemple : unique, not_null, accepted_values
    • Idéal pour la validation des données
  2. Tests unitaires

    • Vérifient la logique de transformation complexe
    • Permettent de tester avec des données d'entrée contrôlées
    • Exemple : logique de détermination de l'origine du locataire
    • Idéal pour tester la logique métier

Exécution des tests

# Tous les tests
dbt test

# Tests unitaires uniquement
dbt test -s test_type:unit

# Tests spécifiques à un modèle
dbt test -s core_tenant_account

Développement

Pré-commit hooks

  1. Installation :
pip install pre-commit
  1. Configuration dans .pre-commit-config.yaml :
repos:
  - repo: https://github.com/sqlfluff/sqlfluff
    rev: 3.3.0
    hooks:
      - id: sqlfluff-lint
      - id: sqlfluff-fix
  1. Activation :
pre-commit install

Gestion des permissions PostgreSQL

-- Accès par défaut aux futures tables
alter default privileges 
for user sql_user 
in schema sql_schema 
grant select on tables 
to group sql_group;

-- Accès aux tables existantes
alter default privileges in schema sql_schema
grant select on tables to group sql_group;

-- Usage du schéma
grant usage on schema sql_schema to group sql_group;

-- Accès SELECT à toutes les tables
grant select on all tables in schema sql_schema to group sql_group;

Support

Pour toute question ou problème :

Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

About

data transformation for DossierFacile using DBT framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •