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.csvdans la tableref_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.) ?