> For the complete documentation index, see [llms.txt](https://cleyrop.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cleyrop.gitbook.io/docs/v-4.5/projet-data-and-ia/dataflow/creer-un-dataflow.md).

# Créer un Dataflow

Créer un Dataflow dans Cleyrop, c’est concevoir une chaîne de transformations de données capable de lire, transformer, produire des datasets ou orchestrer des traitements.

L’interface a été pensée pour rendre cette création **visuelle, collaborative et accessible** à tous les profils, aussi bien techniques que métiers.

Chaque Dataflow suit le même principe général, mais son comportement dépend du **type choisi à la création : Spark ou Python**.

***

## Créer le Dataflow

Lors de la création, vous devez [**choisir le type de moteur d’exécution**](/docs/v-4.5/projet-data-and-ia/dataflow/creer-un-dataflow/choisir-le-bon-type-de-dataflow.md) :

* Spark Dataflow → pour les traitements distribués et structurés à grande échelle (ETL, jointures, agrégations, normalisations).
* Python Dataflow → pour les orchestrations, automatisations ou traitements non distribués (appels API, parsing, collecte, scripts métiers).

Pour créer un Dataflow au sein d'un projet, cliquez sur `Dataflow` dans le menu de gauche puis sur le bouton `Créer`.

* Définissez un nom et une description
* Choisissez un type : **Spark ou Python**

{% hint style="warning" %}
Le type de Dataflow ne pourra pas être modifié par la suite.
{% endhint %}

* Choisissez un **Cluster** d'exécution : en fonction du type une liste de cluster sera disponible.\
  Des Clusters par défaut avec une configuration minimale sont créés et gérés par Cleyrop. Des nouveaux Clusters avec des configurations de ressources différentes peuvent être créés par les Platform Managers.\
  Le Choix du cluster pourra être modifié par branche par la suite.

### Ajouter des datasets d’entrée (optionnel)

{% hint style="info" %}
Seuls les Dataset présents dans la Bibliothèque de Dataset projet peuvent être utilisés dans un Dataflow.
{% endhint %}

Vous pouvez ajouter un dataset d’entrée dans votre Dataflow :

* il sert de base aux transformations,
* lorsque le Dataset est lié à une transformation, il est accessible directement en code:
  * Dans les transformations Python via *`cleyrop_datasets["project.dataset"]`*
  * Dans les transformations SQL : *`project.dataset`*

{% hint style="warning" %}
La commande *cleyrop\_datasets\["project.dataset"]* renvoie :

* Pour un Dataflow de type **Spark : un dataframe PySpark**
* Pour un Dataflow de type **Python : un Lazy Polars**
  {% endhint %}

{% hint style="success" %}
Vous pouvez utiliser &#x6C;**’auto-complétion** dans l’éditeur de code : en tapant au moins trois lettres du nom d’un Dataset, Cleyrop vous suggère automatiquement la bonne syntaxe à insérer selon le contexte (Spark ou Python).
{% endhint %}

Voici des exemples d'utilisation de Dataset d'entrée dans le code

{% tabs %}
{% tab title="Python" %}

```python
df = cleyrop_datasets["demonstration_customer_care_plus.customer_product_info"]
df = df.drop(columns=["Address", "left_Address", "right_CustomerID", "left_ProductID"])

return df
```

{% endtab %}

{% tab title="Spark SQL" %}
{% code title="Spark SQL : input dataset use " %}

```sql
SELECT
  Address,
  regexp_extract(Address, '\\d{5}', 0) AS PostalCode,
  regexp_extract(Address, '\\d{5}\\s+(.*)', 1) AS City
FROM
  project.customers;  #ID unique du Dataset
```

{% endcode %}
{% endtab %}

{% tab title="Low Code" %}

<figure><img src="/files/IdpqC87FZUSf0bsw5gBC" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

Vous pouvez sinon démarrer directement avec une transformation qui récupère des données externes (ex. via une API, un S3, ou une base SQL) :

{% code title="API call example polars" %}

```python
import requests, polars as pl

data = requests.get("https://api.exemple.com/data").json()
df = pl.DataFrame(data).lazy()
return df
```

{% endcode %}

### Ajouter une transformation

Les transformations représentent les étapes de traitement de votre Dataflow.

Elles peuvent être de différents types selon le moteur choisi :

<table><thead><tr><th width="203.66015625">Type de Dataflow</th><th>Transformations possibles</th><th>Output</th></tr></thead><tbody><tr><td><strong>Spark</strong></td><td>PySpark, SQL, Low Code</td><td>Dataset output obligatoire</td></tr><tr><td><strong>Python</strong></td><td>Python libre (Polars ou Pandas)</td><td>Dataset ou autre</td></tr></tbody></table>

Pour ajouter une transformation, choisissez le type de transformation souhaité, puis :

* Renseignez les informations nécessaires :
  * Nom de la Transformation pour plus de lisibilité dans le graphe
  * Informations sur le Dataset de sortie (si choix Dataset de sortie):
    * Nom du dataset de sortie (un Identifiant unique du dataset sera alors généré et ne sera pas modifiable)
    * Mode de rafraîchissement :
      * *Replace* → les anciennes données sont remplacées
      * *Append* → les nouvelles données sont ajoutées
  * Possibilité de choisir "Autre" en sortie pour une transformation Python dans un Dataflow de type Python
* Reliez éventuellement le Dataset d'entrée à la transformation en cliquant sur l'extrémité droite du Dataset d'entrée
  * Maintenez le clic et reliez le Dataset d'entrée à la transformation.
* Ecrivez [votre transformation](/docs/v-4.5/projet-data-and-ia/dataflow/creer-un-dataflow/ecrire-une-transformation.md) ou configurez votre[ bloc Low Code](/docs/v-4.5/projet-data-and-ia/dataflow/transformer-sans-code-low-code.md).

{% hint style="warning" %}
Les transformations **SQL** et **Low Code** ne sont disponibles uniquement pour les Dataflow de type **Spark**
{% endhint %}

<figure><img src="/files/88jAjiWVH9hIMpj44SRr" alt="" width="375"><figcaption></figcaption></figure>

### Configurer le dataset de sortie

Pour les transformations, vous pouvez configurer le [**Dataset de sortie**](/docs/v-4.5/projet-data-and-ia/dataflow/creer-un-dataflow/configurer-un-dataset-de-sortie.md) :

* **Nom**, description, responsable
* **Sensibilité**
* **Classification** : bronze, silver, gold
* **Labels**
* **Mode de rafraîchissement :** *replace ou append*

{% hint style="warning" %}
Le **mode de rafraîchissemen**t n'est pas modifiable après la première exécution de la transformation parent
{% endhint %}

Cela permet de maîtriser la gouvernance et la mise à jour des données produites.

Une fois votre Dataflow exécuté, vous pouvez choisir de **référencer le dataset de sortie dans la bibliothèque** de votre projet pour le rendre disponible à d'autres utilisateurs.

* Utilisez le bouton **Référencer** depuis le graphe ou la fiche de détail du dataset de sortie.

Le dataset marqué pour référencement sera visible dans la bibliothèque **une fois le Dataflow déployé en production**.

<figure><img src="/files/EhOfGzhW4YdsOTJI1tIj" alt="" width="563"><figcaption></figcaption></figure>

**Attention au schéma du dataset de sortie**

Le schéma d’un dataset (colonnes et types) est **commun à toutes les branches d’un même Dataflow**.

Certaines bibliothèques (Pandas, Spark, Polars) n’ont pas les mêmes conventions de typage.

### Sauvegarder et exécuter

Quand votre Dataflow est prêt :

* Cliquez sur Sauvegarder pour enregistrer vos modifications.
* ou Cliquez directement sur Exécuter pour lancer le traitement, le Dataflow sera automatiquement sauvegardé.

Au lancement de l'exécution, une fenêtre s'ouvre avec un lien `Allez vers` qui permet de suivre l'état d'avancement de l'exécution en temps réel.

<figure><img src="/files/eSdq9t3dJbrTokIHY58O" alt="" width="375"><figcaption></figcaption></figure>

Vous pouvez également retrouver votre exécution en allant :

* sur la page des Dataflow du projet dans l'onglet historique
* en allant sur le panel de bouton de droite, onglet Exécutions et choisir la dernière exécution

<figure><img src="/files/qkTNM4NNX0fQIxYNwpk9" alt=""><figcaption></figcaption></figure>

Les logs de chaque transformation sont visibles en temps réel.

### Sauvegarde de la position des noeuds d'un dataflow <a href="#sauvegarde-de-la-position-des-elements-dun-dataflow" id="sauvegarde-de-la-position-des-elements-dun-dataflow"></a>

Il est possible de modifier et sauvegarder la position des éléments graphiques dans une version de dataflow déjà déployée sur la branche principale. Toute autre modification reste soumise à la procédure classique via branche et MR.

### Naviguer dans le graphe et visualiser les datasets

* Cliquez sur un dataset pour prévisualiser son contenu (100 premières lignes selon la taille).
* Cliquez sur une transformation pour voir la liste des datasets liés (en entrée et en sortie) et logs de la dernière exécution

💡 Cette approche visuelle permet à chacun (y compris les nouveaux arrivants) de comprendre rapidement le flux de traitement, sans devoir lire le code.

## Statut du Dataflow et des Datasets à la création

Lors de la création d’un Dataflow, son statut est **Brouillon** :

* Le Dataflow est modifiable uniquement par son propriétaire (par défaut le créateur du Dataflow).
* Il peut être exécuté, testé et itéré librement sans impacter d’autres projets
* Ses Datasets de sortie ne sont pas encore visibles ni réutilisable dans d’autres Dataflows, dashboards ou catalogues.

Les autres membres du projet ont accès en lecture au Dataflow et ses exécutions.

{% hint style="warning" %}
Pour [**collaborer**](/docs/v-4.5/projet-data-and-ia/dataflow/collaborer-et-versionner.md) ou réutiliser un dataset, il faut le passer en **Production**
{% endhint %}

Pour passer en **Production**

1. Ouvrez la fiche du Dataflow.
2. Cliquez sur **Déployer**.

***

## Bonnes pratiques

* Pour Spark, évitez le code non distribué (pandas standard).
* Pour Python, retournez idéalement un polars.LazyFrame pour compatibilité et performance.
* Ne forcez pas un dataset de sortie si votre transformation n’en produit pas naturellement (ex. appels API, nettoyage).
* Donnez des noms clairs et cohérents à vos transformations et outputs.
* Testez chaque étape isolément avant d’enchaîner des transformations complexes.
