Skip to content

NAÏA — Créer une tâche

NAÏA génère la configuration YAML et le fichier SQL d'une tâche Noria à partir d'une description en langage naturel.

Comment l'utiliser

Charge le prompt 1_create_task.prompt.md, puis décris ce que tu veux faire en une phrase naturelle.

Exemples de demandes

Tâche d'agrégation simple

Demande : une tâche qui calcule le CA mensuel par région à partir de la table commandes, en excluant les avoirs, avec un remplacement total

NAÏA génère :

nodes:
  monthly_revenue_region:
    sql: sql/monthly_revenue_region.sql
    target: "{{ params.schema }}.monthly_revenue_region"
    output_write: replace
    description: "CA mensuel par région (hors avoirs)"
    tags: [daily, finance]
    needs: [commandes]
-- sql/monthly_revenue_region.sql
SELECT
    region,
    {{ date_trunc('month', 'date_commande') }}  AS mois,
    COUNT(*)                                    AS nb_commandes,
    ROUND(SUM(montant_ht), 2)                  AS ca_ht,
    ROUND(SUM(montant_ht * 1.20), 2)          AS ca_ttc
FROM {{ params.schema }}.commandes
WHERE type_piece != 'AVOIR'
GROUP BY
    region,
    {{ date_trunc('month', 'date_commande') }}
ORDER BY region, mois DESC

Tâche avec merge et boucle

Demande : une tâche qui met à jour les stats par pays pour chaque pays de la table ref_countries, en parallèle, avec un merge sur (pays, mois)

NAÏA génère :

nodes:
  stats_by_country:
    sql: sql/stats_pays.sql
    target: "{{ params.schema }}.stats_{{ params.code_pays }}"
    output_write: merge
    merge_key: [pays, mois]
    description: "Stats mensuelles par pays — {{ params.code_pays }}"
    tags: [daily]

    loop_from_query: >
      SELECT code_pays, libelle_pays
      FROM {{ params.schema }}.ref_countries
      WHERE actif = TRUE

    loop_parallel: true
    loop_max_workers: 4
    loop_on_error: skip

Assertion qualité

Demande : une assertion qui vérifie qu'aucun client n'a un CA négatif

nodes:
  assert_positive_revenue:
    type: assert
    sql: sql/assert_positive_revenue.sql
    description: "Aucun client ne doit avoir un CA négatif"
    tags: [qualite]
    needs: [customer_stats]
-- sql/assert_positive_revenue.sql
-- Retourne les violations (ca_total < 0)
-- La tâche échoue si des lignes sont retournées
SELECT
    client_id,
    ROUND(ca_total, 2) AS ca_total,
    'CA négatif interdit' AS motif
FROM {{ params.schema }}.customer_stats
WHERE ca_total < 0

Seed

Demande : charger le fichier data/ref_postal_codes.csv dans la table ref_postal_codes

nodes:
  seed_codes_postaux:
    type: seed
    seed_file: data/ref_postal_codes.csv
    target: "{{ params.schema }}.ref_postal_codes"
    seed_delimiter: ";"
    seed_encoding: "latin-1"
    description: "Référentiel des codes postaux"
    tags: [ref]

Questions que NAÏA peut poser

Pour compléter la configuration, NAÏA peut te demander :

  • Source : de quelle(s) table(s) part-on ?
  • Cible : nom de la table résultat ?
  • Mode : remplacement total, incrémental, merge ?
  • Clé : quelle colonne identifie un enregistrement de façon unique ?
  • Dépendances : quelles tâches doivent s'exécuter avant ?
  • Tags : comment catégoriser cette tâche ?
  • Filtres : y a-t-il des conditions de filtrage (date, statut, etc.) ?