Skip to content

Configuration — noria.yml

Le fichier noria.yml est la configuration centrale de tout projet Noria. Il décrit la base de données, les paramètres globaux, et l'ensemble des tâches du pipeline.

Structure complète

name: mon_pipeline                  # (requis) identifiant du pipeline
description: "Description courte"  # (optionnel)
version: "1"                        # (optionnel) version du pipeline

database:
  dialect: duckdb                   # duckdb | postgresql | bigquery
  database: data/warehouse.db       # chemin fichier (DuckDB) ou nom BDD
  host: localhost                   # PostgreSQL / BigQuery
  port: 5432
  user: mon_user
  password: "${DB_PASSWORD}"        # supporte ${ENV_VAR}
  schema: mon_schema

params:
  schema: main
  env: prod
  annee: 2024

params_file: params/prod.yml        # fichier YAML de params supplémentaires
macros_dir: sql/macros              # répertoire des macros Jinja2 utilisateur
sql_dir: sql                        # répertoire des fichiers SQL
tracking_db: .noria/tracking.db    # base SQLite de suivi des exécutions

monitoring:
  enabled: false
  host: 127.0.0.1
  port: 7070
  auto_open: false

notifications:
  on_failure:
    - "https://hooks.slack.com/services/xxx"
    - "email:ops@mycompany.com"
  on_success: []
  timeout_s: 10

nodes:
  nom_tache:
    # ... voir référence des tâches ci-dessous

Section database

Champ Type Défaut Description
dialect string duckdb Moteur : duckdb, postgresql, bigquery
database string :memory: Chemin fichier DuckDB, nom BDD PostgreSQL, ou project ID BigQuery
host string — Hôte PostgreSQL
port int — Port (défaut PostgreSQL : 5432)
user string — Utilisateur
password string — Mot de passe — utiliser ${ENV_VAR} ou .noria/.env
schema string — Schéma par défaut

Section params

Paramètres globaux accessibles dans tous les fichiers SQL via {{ params.nom }} ou directement {{ nom }}.

params:
  schema: main
  env: prod
  date_debut: "2024-01-01"
SELECT * FROM {{ params.schema }}.commandes
WHERE date_op >= '{{ params.date_debut }}'

Priorité des paramètres (du plus faible au plus fort)

  1. params: dans noria.yml
  2. params_file: (fichier YAML externe)
  3. params: au niveau de la tâche
  4. --param k=v en CLI
  5. --params-file fichier.yml en CLI

Champs d'une tâche

Identification

Champ Type Défaut Description
type string sql Type : sql, assert, seed
sql string — Chemin du fichier SQL
target string — Table cible schema.table (Jinja2 compilé)
description string — Description de la tâche
active bool true Désactiver sans supprimer
tags list [] Tags pour filtrage CLI (--only-tags)

Chargement

Champ Type Défaut Description
output_write string replace Stratégie d'écriture (voir Modes d'écriture)
merge_key list — Clés pour merge
incremental_key string — Colonne de partition pour incremental
safe_replace_min_rows int 1 Seuil minimum de lignes pour safe_replace
scd2_key list — Clé métier pour scd2
update_key list — Clés de recherche pour update
update_cols list — Colonnes à mettre à jour (toutes si absent)

Resilience

Champ Type Défaut Description
retry int 0 Nombre de réessais
retry_delay_s float 0.0 Secondes entre les réessais
timeout int — Timeout en secondes
soft_fail bool false Ne pas bloquer le pipeline si échec
always_run bool false Exécuter même si une dépendance a échoué

Dépendances

Champ Type Défaut Description
needs list [] Tâches qui doivent terminer avant celle-ci
params dict {} Paramètres locaux (surchargent les params globaux)

Hooks

pre_hook:
  file: sql/hooks/avant.sql
  soft_fail: false   # true = log l'erreur mais continue
post_hook:
  file: sql/hooks/apres.sql
  soft_fail: true

Seeds

Champ Type Défaut Description
seed_file string — Chemin du fichier (CSV, Parquet, JSON)
seed_delimiter string , Séparateur CSV
seed_encoding string utf-8 Encodage
seed_null_value string "" Valeur considérée comme NULL

Freshness check

freshness_check:
  column: updated_at   # colonne timestamp
  max_hours: 24        # échoue si plus vieux que 24h

Variables d'environnement

Les valeurs ${NOM_VAR} sont résolues depuis .noria/.env (auto-chargé) puis le shell.

# .noria/.env  (non versionné — ajoutez-le à .gitignore)
DB_PASSWORD=mon_mot_de_passe
SLACK_WEBHOOK=https://hooks.slack.com/services/xxx
database:
  password: "${DB_PASSWORD}"
notifications:
  on_failure:
    - "${SLACK_WEBHOOK}"

Exemple complet

name: pipeline_ventes
description: "Pipeline de reporting des ventes"
version: "2"

database:
  dialect: duckdb
  database: data/ventes.db

params:
  schema: main
  schema_raw: staging
  annee: 2024

params_file: params/prod.yml

notifications:
  on_failure:
    - "${SLACK_WEBHOOK}"

nodes:
  ref_products:
    type: seed
    seed_file: data/produits.csv
    target: "{{ params.schema }}.ref_products"
    description: "Référentiel produits"
    tags: [ref]

  commandes:
    sql: sql/commandes.sql
    target: "{{ params.schema }}.commandes"
    output_write: incremental
    incremental_key: date_commande
    description: "Commandes {{ params.annee }}"
    tags: [daily]
    retry: 2
    retry_delay_s: 30
    timeout: 600
    needs: [ref_products]

  monthly_stats:
    sql: sql/monthly_stats.sql
    target: "{{ params.schema }}.monthly_stats"
    output_write: replace
    description: "Statistiques par mois"
    tags: [daily, reporting]
    needs: [commandes]

  assert_stats:
    type: assert
    sql: sql/assert_stats.sql
    description: "Vérifie que les stats sont alimentées"
    needs: [monthly_stats]