fbpx

Maitriser le tri des données

Voici un tutoriel sur le tri des données que vous pouvez être amenés à traiter. En effet que ce soit pour l’affichage ou certains traitements, il peut être intéressant que les données soient triées selon un ou plusieurs critères. Pour ce faire nous allons utiliser notre fichier « Personne_adresse.xml » que nous avons généré lors du tutoriel précédent. Vous pouvez donc le réutiliser, sinon vous pouvez télécharger ici : Cliquez ici




Comment maitriser le tri des données ?

 

Pour commencer vous allez ouvrir le projet « tutoriels_talend » et créer un job « Tri ». 

Ajoutez un tFileInputXML afin d’ouvrir le fichier « Personne_adresse.xml » et définissez le schéma. 



La requête XPath boucle dépend du fichier xml que vous avez. Si vous ouvrez le fichier « personne_adresse.xml» vous devriez voir ceci. 



Les informations de chaque personne (id,sexe,nom,…) se trouvent dans un champ « personne » lui-même contenu dans un champ « root ». 

Visualisez ça comme un chemin d’accès à un fichier, par exemple si je veux avoir accès au champ id d’une personne, il faut que j’aille dans « root/personne/id ». 

Cependant la boucle se fait sur le champ précédant la valeur, donc on s’arrête à « root/personne ». 



Il faut maintenant terminer le mapping pour récupérer les données. 

Il faut donc indiquer au composant quels sont les champs à récupérer du fichiers « Personne_adresse.xml ». 

Vous pouvez ajouter un tLogRow à la suite du tFileInputXML afin de vous assurer que le composant récupère bien les données voulues puis exécutez le job. 



Bien maintenant nous allons ajouter un composant tSortRow qui permet de trier les données du fichier xml que nous venons de lire. Ajoutez également une connexion de type « Main » entre le tLogRow et le tSortRow. 



Cliquez sur « Sync colonnes » cela vous permettra d’ajouter automatiquement le schéma du flux. 

Maintenant nous pouvons ajouter un critère de tri, clique sur le « + » vert, sélectionnez la colonne « id », tri « num » et ordre « desc ». 

Ajoutez également un autre tLogRow afin de visualiser le résultat du tri. 



Exécutez le job et observez, les personnes sont triées par ordre décroissant de leur identifiant. Changez la colonne du critère pour trier sur l’âge par ordre croissant cette fois. 



Il est également possible de trier sur plusieurs champs. 

Cliquez sur le « + » vert et ajoutez un champ pour le nom et choisissez un tri alphabétique en ordre descendant. Nous allons également changer l’ordre du tri pour qu’il s’effectue dans un premier temps sur le nom, puis sur l’âge. Pour réaliser cela, cliquez sur votre critère et utiliser les flèches jaunes pour monter ou descendre le critère. 



Exécutez le job et observez le résultat, le tri se fait dans un premier temps sur le nom des personnespuis sur leur âge. 



Je vous invite à versionner votre job, nous allons voir un autre tri, avec un composant que nous avons déjà vu ensemble, j’ai nommé le tMap. 



Réouvrez donc votre job « Tri » et supprimez le composant tSortRow, ajoutez un tMap à la place puis ouvrez l’éditeur de mapping. (Un double clic sur le tMap aura pour effet de l’ouvrir directement). 



Une fois ouvert nous allons créer une nouvelle sortie en cliquant sur le « + » vert de la partie droite de l’éditeur. Nommez la « femmes ». Nous allons sélectionner uniquement les femmes de notre fichier d’entrée. 



Vous pouvez maintenant copier le schéma de l’entrée vers la sortie et cliquer sur « Mapping auto » afin de générer les liaisons.   

Remarque : Le « Mapping auto » fonctionne UNIQUEMENT si le nom de variables en sortie est IDENTIQUE à celui des variables en entrée. 



Maintenant vous allez ouvrir le filtre d’expressionNormalement je ne vous apprends rien, mais je le dis au cas où, Talend est basé sur du Javail répond donc aux spécifications de ce langage, et ici nous en avons un parfait exemple : 



Analysons un peu cette expression : 

  • row2 représente le flux d’entré 
  • sexe représente la chaine de caractère contenant le sexe de la personne courante. 

Comme nous somme en Java, la chaîne de caractère est considérée comme un Objet, et le test d’égalité passe par la méthode « equals » que nous avons ici. 

Pour les plus averti au Java, je vais vous donner une petite astuce, dans votre Job designer vous pouvez avoir accès au code Java. 



Remarquez que l’on retrouve notre test conditionnel dans l’encadré rouge de l’image ci-dessus. 

Vous l’aurez donc compris, il est possible dans l’expression de filtre d’ajouter plusieurs conditions à l’aide des opérateurs logique « && » et « || ». 

Revenons à notre job, liez le tMap au composant tLogRow via la sortie que nous venons de créer puis exécutez le job. 



Vous pouvez voir que seulement les femmes sont affichées. 

Ce qui aurait été pas mal c’est de pouvoir afficher sur une sortie les femmes, et sur une autre les hommes non ? 

Et bien qu’attendons, créons une nouvelle sortie supplémentaire que nous allons appeler « hommes ». 



Pour filtrer les données sur cette nouvelle sortie, on pourrait reprendre le filtre d’expression et remplacer le « F » par un « H » et cela fonctionnerait. Cependant nous allons faire un petit peu différemment. 

Commencez par ouvrir le « tMap settings » et mettez la propriété « Catch ouput reject» à «true » comme sur l’image ci-dessous. 



Pour les moins anglophone d’entre nous, comprenez « Attraper les rejets de sortie », Autrement dit attraper toutes les personnes qui ne sont pas des femmes, donc des hommes dans notre cas. 

Liez cette nouvelle sortie a un second tLogRow et exécutez le job. 



Vous pouvez sauvegarder et versionnez votre job, ce tutoriel sur le tri est maintenant fini. 

Sur le même sujet...


Utiliser le composant tMap

Découvrez comment utiliser le composant tMap sur Talend

Découvrir

Créer un fichier csv

Apprendre à créer un fichier .csv grâce à Talend

Découvrir