Skip to content

NAÏA — Analyser un pipeline

NAÏA peut auditer un noria.yml et identifier les problèmes de configuration, les risques opérationnels, et les opportunités d'optimisation.

Comment l'utiliser

  1. Charge le prompt 2_analyse_pipeline.prompt.md
  2. Colle le contenu de ton noria.yml
  3. NAÏA retourne un tableau priorisé de recommandations

Ce que NAÏA analyse

Robustesse

  • Tâches sans retry: qui accèdent à des ressources externes (API, fichiers)
  • Tâches sans timeout: avec des requêtes potentiellement longues
  • Tâches critiques sans soft_fail: clairement positionné
  • Absence de notifications on_failure:

Qualité des données

  • Absence d'assertions (type: assert) sur les tables importantes
  • Absence de freshness_check: sur les tables alimentées par des sources externes
  • output_write: replace sur de grandes tables sans safe_replace_min_rows

Performance

  • Tâches indépendantes qui pourraient s'exécuter en parallèle
  • Loops séquentielles qui pourraient bénéficier de loop_parallel: true
  • Tâches qui recalculent tout alors qu'elles pourraient être incremental

Configuration

  • Paramètres hardcodés dans le SQL au lieu d'utiliser {{ params.x }}
  • Clés de merge manquantes ou incorrectes
  • Dépendances circulaires ou manquantes
  • Tâches sans description: ou sans tags:

Exemple de rapport NAÏA

Pour ce pipeline :

nodes:
  load_orders:
    sql: sql/load_orders.sql
    target: main.commandes
    output_write: replace

  stats:
    sql: sql/stats.sql
    target: main.stats
    output_write: replace
    needs: [load_orders]

  rapport:
    sql: sql/rapport.sql
    target: main.rapport
    output_write: replace
    needs: [stats]

NAÏA retourne :

Priorité Tâche Problème Correction suggérée
🔴 Critique load_orders Pas de retry: sur une tâche de load_orders externe Ajouter retry: 3, retry_delay_s: 30
🔴 Critique load_orders output_write: replace sans garde-fou Passer à safe_replace avec safe_replace_min_rows: 1000
🟡 Important stats Pas d'assertion qualité après calcul Ajouter une tâche assert_stats après stats
🟡 Important pipeline Pas de notifications: configurées Ajouter on_failure: avec webhook Slack
🟢 Suggestion toutes Aucune tâche n'a de description: Ajouter une description à chaque tâche
🟢 Suggestion toutes Aucun tags: défini Ajouter des tags pour le filtrage CLI

Pipeline après corrections NAÏA

notifications:
  on_failure:
    - "${SLACK_WEBHOOK}"

nodes:
  load_orders:
    sql: sql/load_orders.sql
    target: "{{ params.schema }}.commandes"
    output_write: safe_replace
    safe_replace_min_rows: 1000
    description: "Chargement des commandes depuis l'API"
    tags: [daily, critique]
    retry: 3
    retry_delay_s: 30
    timeout: 300

  assert_load_orders:
    type: assert
    sql: sql/assert_commandes.sql
    description: "Vérifie l'intégrité des commandes chargées"
    tags: [qualite]
    needs: [load_orders]

  stats:
    sql: sql/stats.sql
    target: "{{ params.schema }}.stats"
    output_write: replace
    description: "Statistiques agrégées"
    tags: [daily]
    needs: [assert_load_orders]

  rapport:
    sql: sql/rapport.sql
    target: "{{ params.schema }}.rapport"
    output_write: replace
    description: "Rapport final"
    tags: [daily, reporting]
    needs: [stats]