Macros
nhic_dbt fournit une bibliothèque de plus de 30 macros qui prennent en charge le travail répétitif de nettoyage et de transformation des données de santé. Toutes les macros se trouvent sous macros/ et sont disponibles dans chaque modèle sans aucun import.
Macros de nettoyage des données
Ces macros garantissent la sûreté des types et normalisent les valeurs nulles, les chaînes vides et les valeurs mal formées. Chacune enveloppe une expression de colonne source en SQL et renvoie une valeur nettoyée du type cible.
| Macro | Rôle |
|---|---|
clean_boolean | Convertit et normalise les valeurs de type booléen (1/0, true/false, Y/N) |
clean_date | Analyse et valide les chaînes de dates ; renvoie null pour les valeurs non interprétables |
clean_double | Convertit en double précision ; force à null les valeurs non numériques |
clean_integer | Convertit en entier ; force à null les valeurs non numériques |
clean_integer_range | Convertit en entier et impose une plage min/max ; les valeurs hors plage renvoient null |
clean_key_date | Comme clean_date, mais destinée aux colonnes de clés de substitution — échoue bruyamment sur les valeurs nulles |
clean_key_integer | Comme clean_integer, mais pour les colonnes de clés — échoue bruyamment sur les valeurs nulles |
clean_key_regexp | Valide une colonne de clé par rapport à une expression régulière |
clean_key_text | Supprime les espaces superflus et met en majuscules les colonnes de clés textuelles ; tolérante aux valeurs nulles |
clean_key_time | Analyse et valide les chaînes d’heures pour les colonnes de clés |
clean_month_date | Analyse les dates partielles au format YYYY-MM et les tronque au mois |
clean_number | Convertit en numérique (précision arbitraire) ; force à null les valeurs non numériques |
clean_regexp | Valide une colonne textuelle par rapport à une expression régulière ; les valeurs non conformes renvoient null |
clean_text | Supprime les espaces superflus et normalise les chaînes vides en null |
clean_time | Analyse et valide les chaînes d’heures ; renvoie null pour les valeurs non interprétables |
clean_timestamp | Analyse et valide les chaînes d’horodatage ; renvoie null pour les valeurs non interprétables |
Exemple d’utilisation
-- models/staging/cemr/stg_cemr__patients.sql
select
{{ clean_key_integer('patient_id') }} as patient_id,
{{ clean_text('first_name') }} as first_name,
{{ clean_text('last_name') }} as last_name,
{{ clean_date('date_of_birth') }} as date_of_birth,
{{ clean_key_text('national_id') }} as national_id,
{{ clean_timestamp('created_at') }} as created_at,
{{ clean_boolean('is_active') }} as is_active
from {{ source('cemr', 'patients') }}Les variantes clean_key_* expriment une intention — ces colonnes servent dans des jointures ou comme clés de substitution, donc les valeurs nulles inattendues remontent sous forme d’avertissements lors de dbt test.
Macros utilitaires
| Macro | Rôle |
|---|---|
array_cast | Convertit les éléments d’un tableau Postgres d’un type vers un autre |
date_util | Ensemble d’assistants de manipulation de dates (périodes fiscales, calcul d’âge, etc.) |
hash_column | Génère une clé de hachage MD5 déterministe à partir d’une ou plusieurs colonnes — utilisée pour la déduplication et la génération de clés de substitution |
pivot_key_value | Pivote une table de paires clé-valeur en colonnes larges — courant pour les éléments de données DHIS2 |
standardize_facility_name | Normalise les noms des établissements de santé entre systèmes sources à l’aide d’une table de référence |
Exemple avec hash_column
-- Surrogate key from multiple columns
select
{{ hash_column(['patient_id', 'visit_date', 'facility_code']) }} as visit_sk,
patient_id,
visit_date,
facility_code
from {{ ref('stg_cemr__visits') }}Sous-répertoires par domaine
Pour la logique propre à une source qui n’a pas sa place dans une macro générale, les macros sont regroupées en sous-répertoires :
| Répertoire | Contenu |
|---|---|
macros/crvs/ | Transformations des données d’état civil et correspondances propres au CRVS |
macros/efiche/ | Assistants d’analyse des dossiers ambulatoires eFICHE |
macros/hmis_tracker/ | Assistants pour les entités suivies et les étapes de programme DHIS2 |
macros/incremental_load/ | Assistants pour les stratégies de matérialisation incrémentale |
macros/process_dhis2__org_units/ | Traitement de la hiérarchie des unités d’organisation DHIS2 |