> 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/transformer-sans-code-low-code.md).

# Transformer sans code (Low Code)

Le mode Low Code permet de créer des transformations visuelles dans un Dataflow Spark.

Chaque bloc correspond à une opération de traitement de données (filtrage, jointure, agrégation, etc.) que vous pouvez enchaîner sans écrire de code Python ou SQL.

Ce mode facilite la collaboration entre profils techniques et métiers, tout en garantissant la reproductibilité et la traçabilité des transformations.

**Principe de fonctionnement**

Chaque transformation Low Code **génère un nouveau dataset de sortie** sans modifier le dataset d'entrée. Cela garantit la traçabilité et permet de chaîner plusieurs transformations en toute sécurité. Le dataset d'origine reste intact et peut être réutilisé par ailleurs.

***

## Ajouter une transformation Low Code

1. Créez un Dataflow de **type Spark**.
2. Dans le menu de gauche, choisissez Low Code (1 entrée) ou Low Code (2 entrées) pour ajouter une transformation de type Low Code
3. Choisissez l’opération à appliquer (ex. filtrer, agréger, renommer…).

Chaque bloc Low Code est visuellement relié à son dataset d’entrée et à son dataset de sortie dans le graphe du Dataflow.

{% hint style="success" %}
Chaque étape d'une transformation peut être validé avant exécution globale :\
vous pouvez **prévisualiser le résultat de l'étape**
{% endhint %}

### Combiner Low Code et code Python / SQL

Les étapes Low Code peuvent être combinées avec des transformations Python ou SQL. Cela permet à un **utilisateur métier de préparer les données en Low Code**, puis à un utilisateur technique de les enrichir en code, sans rupture dans le flux. :

* Ajoutez une transformation Low Code pour les opérations simples et visuelles.
* Ajoutez ensuite une transformation Python ou SQL pour les traitements plus avancés (nettoyage spécifique, fonctions analytiques, etc.).
* Cleyrop gère automatiquement **la cohérence des entrées et sorties entre les étape**s.

{% hint style="danger" %}
Pour fonctionner les transformations Low code ont besoin du **schéma du Dataset d'entrée :** il faut donc qu'il ait été construit au moins une fois. Pour les branches par exemple, si vous chaînez des étapes pensez à les exécuter une première fois
{% endhint %}

### Chaîner plusieurs transformations 1 entrée

Les blocs Low Code 1 entrée peuvent être enchaînés :

1. Chaque bloc prend en entrée le dataset de sortie de l’étape précédente
2. Vous pouvez **ajouter, déplacer ou supprimer** un bloc
3. Le graphe du Dataflow se met à jour automatiquement pour refléter la logique de traitement.

{% hint style="info" %}
Le **schéma de sortie** est automatiquement calculé par Cleyrop à chaque étape de la chaîne. Si une incompatibilité de schéma (type, colonne plus utilisée) est détectée, une **erreur** sera affichée
{% endhint %}

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

## Opérations disponibles

**Liste des opérations avec 2 entrées**

<table data-full-width="true"><thead><tr><th width="165.25390625">Type d’opération</th><th width="618.78125">Description</th></tr></thead><tbody><tr><td><strong>Joindre</strong></td><td>Combiner plusieurs datasets selon une clé commune.</td></tr><tr><td><strong>Union</strong></td><td>Empiler les lignes de 2 datasets</td></tr></tbody></table>

**Liste des opérations avec 1 entrée**

<table data-full-width="true"><thead><tr><th width="165.25390625">Type d’opération</th><th width="618.78125">Description</th></tr></thead><tbody><tr><td><strong>Filtrer les lignes</strong></td><td>Garder uniquement certaines lignes selon une condition.</td></tr><tr><td><strong>Filtrer les colonnes</strong></td><td>Garder uniquement certaines colonnes</td></tr><tr><td><strong>Renommer des colonnes</strong></td><td>Changer le nom des colonnes par rapport au dataset d'entrée</td></tr><tr><td><strong>Grouper et agréger</strong></td><td>Agréger des valeurs (somme, moyenne, comptage…).</td></tr><tr><td><strong>Ajouter une colonne calculée</strong></td><td>Créer une colonne à partir d’une expression : +, -, *, /, modulo (%), parenthèses (), puissance (^)<br><br><span data-gb-custom-inline data-tag="emoji" data-code="26a0">⚠️</span> <em>Seuls les types de colonnes int et double peuvent être utilisés</em></td></tr><tr><td><strong>Supprimer les doublons</strong></td><td>Supprimer les lignes identiques sur un ou plusieurs champs.</td></tr><tr><td><strong>Trier les données</strong></td><td>Ordonner les lignes selon un ou plusieurs champs.</td></tr><tr><td><strong>Concaténer des datasets</strong></td><td>Assembler plusieurs sources compatibles en un seul dataset.</td></tr><tr><td><strong>Créer une colonne conditionnel</strong></td><td>Crée une colonne basée sur des conditions appliquées à d'autres colonnes. Utilisez les ET/OU pour ajouter plusieurs conditions</td></tr><tr><td><strong>Modifier les Types de Colonne</strong></td><td>Changer le type de colonnes par rapport au dataset d'entrée<br><br>⚠️ <em>Des erreurs peuvent survenir en cas de conversion impossible (par exemple, lettres en chiffres).</em></td></tr></tbody></table>

### Joindre

**Objectif** : Combiner deux datasets selon des clés communes.

**Paramètres**

* Entrées : vous pouvez échanger les l'ordre des datasets
  * Dataset gauche : Premier dataset (source principale)
  * Dataset droit : Second dataset à joindre
* Type de jointure :
  * Inner : Uniquement les lignes avec correspondance des deux côtés
  * Left : Toutes les lignes de gauche + correspondances de droite
  * Right : Toutes les lignes de droite + correspondances de gauche
  * Outer : Toutes les lignes des deux datasets
* Clés de jointure : 1 à N couples de colonnes (condition ET entre les couples)

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

### Merger (Union)

**Objectif** : Empiler verticalement les lignes de deux datasets de structure similaire.

**Paramètres**

* Datasets sources : Sélection de 2 datasets à unir
* Mode de correspondance : Par nom de colonne ou par position
* Colonnes non communes : Inclure toutes (avec NULL) ou uniquement les colonnes communes
* Déduplication : Union (sans doublons) ou Union All (avec doublons)

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

### Filtrer les colonnes

**Objectif** : Choisir les colonnes à conserver.

**Paramètres**

* Colonnes : Sélection des colonnes à inclure dans le résultat
* Concerver ou supprimer ces colonnes

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

### Filtrer les lignes conditionnellement

**Objectif** : Conserver ou supprimer des lignes selon des conditions.

**Paramètres**

* Conditions
  * Colonne : Sélection de la colonne à filtrer
  * Opérateur : Dépend du type de colonne notamment
    * Numérique/Date : =, ≠, <, >, ≤, ≥, compris entre, est nul, n'est pas nul
    * Texte : égal, différent, contient, ne contient pas, commence par, finit par, est nul, n'est pas nul
  * Valeur ou Colonne : Comparaison avec une valeur fixe ou une autre colonne
  * Conditions multiples : Combinez avec ET / OU en cliquant sur le <i class="fa-plus">:plus:</i> au bout de la ligne
* Conserver ou Supprimer les lignes correspondantes

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

### Grouper et agréger

**Objectif** : Grouper les données et appliquer des fonctions d'agrégation.

**Paramètres**

* Colonnes de regroupement : Définissent les groupes (équivalent GROUP BY)
* Fonctions d'agrégation :
  * SUM, AVG, MIN, MAX, COUNT, COUNT DISTINCT
* Nom des colonnes résultat : généré automatiquement

### Top N

**Objectif** : Extraire les N premières ou dernières lignes selon un critère de classement, avec possibilité de partitionner par groupe.

**Paramètres**

* Nombre de lignes (N) : Quantité de lignes à conserver (ex : 10, 100, 1000)
* Colonnes de tri : Une ou plusieurs colonnes servant au classement (ordre configurable)
* Ordre du tri :
  * Top : Les N plus grandes valeurs (DESC)
  * Bottom : Les N plus petites valeurs (ASC)
* Partition (optionnel) : Colonnes de regroupement pour obtenir le Top N par groupe
* Colonne rang (optionnel) : Ajoute une colonne indiquant le rang de chaque ligne

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

### Transformer des chaînes de caractères

**Objectif** : Appliquer des transformations texte sur une ou plusieurs colonnes.

**Paramètres**

* Colonnes sources : Sélection de 1 à N colonnes de type texte
* Destination : Créer de nouvelles colonnes avec suffixe personnalisable (ex : \_clean)
* Opérations disponibles :

| LEFT(n)       | Extrait les n premiers caractères                         |
| ------------- | --------------------------------------------------------- |
| RIGHT(n)      | Extrait les n derniers caractères                         |
| TRIM          | Supprime les espaces (tous / gauche / droite / multiples) |
| UPPER         | Convertit en majuscules (gère les accents : é → É)        |
| LOWER         | Convertit en minuscules (gère les accents : É → é)        |
| REPLACE(x, y) | Remplace x par y (sensible à la casse)                    |

* Chaînage : Plusieurs opérations peuvent être enchaînées dans l'ordre souhaité

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

### Rechercher dans une chaîne

**Objectif** : Identifier la position d'un texte dans une colonne, ou vérifier sa présence.

**Paramètres**

* **Colonne source** : Sélection d'une colonne de type texte
* **Pattern** : La chaîne de caractères à rechercher (sensible à la casse)
* **Nom de la colonne résultat** : Obligatoire et unique

**Bon à savoir** : Le résultat est de type entier. La valeur retournée est la position du pattern dans la chaîne (à partir de 1), ou -1 si le pattern est absent.

### Concaténer

**Objectif** : Fusionner plusieurs colonnes texte en une nouvelle colonne.

**Paramètres**

* Colonnes sources : Sélection de 2 à N colonnes à concaténer
* Séparateur : Caractère ou chaîne entre les valeurs (défaut : aucun)
* Nom de la colonne résultat : Obligatoire et unique
* Gestion des NULL :
  * Ignorer : Les NULL ne sont pas inclus dans le résultat
  * Chaîne vide : Les NULL sont traités comme ""
  * Propager : Le résultat est NULL si au moins une valeur est NULL<br>

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

### Renommer des colonnes

**Objectif** : Donner un nom différent pour une colonne par rapport au dataset d'origine

**Paramètres**

* Colonne source : Nom actuel de la colonne
* Nouveau nom : Doit être unique dans le dataset

Vous pouvez rajouter des colonnes pour lesquelles vous souhaitez un nom différent en sortie ou modifier les noms de toutes les colonnes en activant "Voir toutes les colonnes"

<figure><img src="/files/2MCqzErTk5JL35mWKNHP" alt=""><figcaption></figcaption></figure>

***

## Bonnes pratiques

* Utilisez le Low Code pour les étapes simples et récurrentes : filtrage, jointure, agrégation, renommage.
* Conservez les étapes plus techniques (ex. API, parsing, logique métier complexe) dans des transformations Python ou SQL.
* Donnez un nom explicite à chaque étape pour faciliter la lecture du graphe.
* Vérifiez le dataset de sortie après chaque transformation via la prévisualisation intégrée.
* Pour les flux de production, documentez les logiques de calcul dans la description de chaque étape.
