10 conseils pour gagner en productivité avec FME

J’aime dire lors de mes formations FME qu’un bon développeur est un développeur « fainéant ». En anglais cela peut se traduire par « Work smarter, not harder » !

Entendez par-là, quelqu’un qui ne réinvente pas la roue et qui maîtrise les bonnes pratiques ainsi que les méthodes efficaces existantes sur son « langage ». FME ne déroge pas à la règle. L’objectif est évidemment d’être plus efficient au quotidien tout comme sur la durée de vie du script.

1 – « Ce que l’on conçoit bien s’exprime clairement »

Cette citation de Nicolas Boileau (homme de lettre du XVIIe siècle), s’applique parfaitement aux développeurs. Pour développer rapidement et efficacement il faut notamment connaître et comprendre vos données source (qualité, projection, géométries…) tout en ayant en tête le résultat attendu. Ceci vous permettra de décomposer votre problématique en sous étapes logiques à mener dans FME pour réussir à atteindre votre objectif.

Ces étapes appelleront naturellement les Transformers opportuns qu’il faudra paramétrer et intégrer dans des signets. On parle d’algorithmie et cela peut se concevoir sur un papier, dans sa tête, une carte mentale… Une logique ou une autre pourra apporter un développement plus ou moins complexe et chronophage. Le résultat des différentes méthodes serait satisfaisant mais le temps de développement et la maintenabilité ne seront pas forcément équivalents.

2 – Réduire le volume de données

Le temps de développement et de traitement est lié au volume et au format des données source. Même avec le cache, limiter le volume des données et leurs attributs est une excellente initiative que ce soit en développement ou en production.

Plusieurs axes à creuser :

En développement

  • Limiter le nombre d’entités à lire dans le Reader ou utiliser un Sampler pour avoir un échantillon représentatif de vos données
  • Exporter des données échantillonnées au format .ffs en amont du développement

En production

  • Filtrer les types d’entités et données nécessaires (clause WHERE, Tester…)
  • Utiliser le SQL (SQLCreator, SQLExecutor, DatabaseJoiner)
  • Filtrer spatialement avec un rectangle englobant (BBOX) ou filtrer les données avec FeatureReader
  • Favoriser des formats rapides comme le CSV et bases de données spatiales indexées

3 – Utiliser le cache à bon escient

La fonctionnalité FME permettant la mise en cache des données a été un véritable game changer lors de son arrivée en 2019. C’est quelque chose que j’ai personnellement attendu de nombreuses années et aujourd’hui qui s’en passerait ?

Ce mode permet dans FME Form d’obtenir des Inspector à chaque Transformers et sur chaque port de sortie. A cela s’est ajouté la possibilité d’inspecter directement le résultat dans FME Workbench. Attention pour autant car son utilisation peut parfois être contre-performante !

Par défaut, à l’installation de FME, le cache est activé et il faut cliquer sur la petite flèche noire à côté du bouton Exécuter pour le désactiver. Lors de mes formations, je propose aux stagiaires d’ajouter l’icône pour activer/désactiver le cache.

L'option d'exécution avec mise en cache des données se trouve dans le sous-menu Exécuter. Je conseille de l'ajouter aussi dans la barre d'outils.
L’option d’exécution avec mise en cache des données se trouve dans le sous-menu Exécuter. Je conseille de l’ajouter aussi dans la barre d’outils.

Cela se passe via le menu Outils > Options FME > Barre d’outils. Dans le sous-menu Exécuter, il est possible de glisser dans la barre d’outils l’icône “Activer la mise en cache des données”.

L’icône est bleue lorsque le cache est activé et un clic permet de le désactiver.

Il est aussi contre-productif d’utiliser le cache lorsque l’on traite des données de type raster (images matricielles). En effet, la mise en cache de ces entités génère un énorme ralentissement du traitement. Il est possible de créer des signets et de les réduire car cela aura pour effet de ne pas mettre en cache les Transformers dans ce dernier.

Cache et passage en production

Lorsque votre script est terminé, pensez aussi à désactiver le mode cache qui est activé par défaut mais qui est chronophage au premier lancement car ce dernier stocke des fichiers temporaires et calcule également les ports non utilisés de vos Transformers.

Ces problématiques de cache ne sont pas à prendre en compte si vous exécutez le traitement en ligne de commande, sur GTF ou sur FME Flow.

4 – Réutiliser vos développements

La réutilisation de bouts de développements que vous adapterez au besoin est une excellente pratique car elle permet souvent un gain de temps énorme.

De la même manière, l’utilisation de Transformers personnalisés (intégrés ou liés) développés par vos soins ou disponibles sur vStore et le FME Hub de Safe Software est une valeur sûre.

Je ne compte plus le nombre de fois ou un Transformer de la communauté m’a permis de répondre en quelques minutes à une problématique rencontrée.

Vous pouvez également créer des « Préparamétrages » dans les Readers, Writers et Transformers afin de réutiliser ces derniers dans vos différents projets.

5 – L’usage des paramètres

Les paramètres publiés permettent de rendre votre script plus adaptable et évolutif.

Liste déroulante, données sources ou destination pilotables, paramètres des Transformers, connexion nommée… Toute cette souplesse permettra un gain de temps à l’utilisation tout en évitant de développer des scripts quasi similaires.

Vous pouvez aussi utiliser les paramètres natifs que FME vous propose et notamment le très utile $(FME_MF_DIR) permettant de donner un chemin relatif vers le projet FME. Ceci vous permettra d’exporter votre projet sans avoir à changer les chemins pointant sur des fichiers entre deux machines. Un gain de temps non négligeable !

6 – Lecture et écriture dynamique

Sur FME, nous avons l’habitude de travailler en mode statique. Ceci est pratique car cela permet de bien dissocier les types d’entités en entrée et en sortie. Le mode dynamique quant à lui permet de tout regrouper en un seul Reader et un seul Writer.

Grâce à une entité schéma, FME sera en mesure de reconstruire les sorties comme les entrées qui sont pourtant fusionnées.

Cela a aussi l’avantage de gérer le changement de structure des fichiers source de manière automatique tout en diminuant parfois fortement le temps de développement !

Astuce : l’outil Connexion des types d’entités permet les connexion en masse

7 – Les fonctionnalités de répartitions

Que ce soit une répartition du type d’entités ou du jeu de données, ce paramétrage permet un grain énorme de productivité lorsque vous avez besoin d’exporter des données ayants un groupe similaire.

Exemple : exporter vos données en créant un fichier par commune. Cela permet aussi de créer une arborescence de stockage en quelques clics.

8 – Travailler la généricité des développements

Il est parfois opportun d’essayer de rendre un script plus générique, c’est-à-dire qui s’adapte à plusieurs besoins proches. Cela évite de développer et de maintenir par la suite nombre de développements quasi similaires. Cela passe évidement par l’utilisation de paramètres publiés mais également par le fait d’exporter des règles de calcul dans des fichiers externes.

9 – Se former et découvrir les Transformers

Tout au long de votre carrière de développeur, il ne faut pas oublier qu’une formation permet de faire un bond dans votre progression.

Connaître les Transformers et à minima le top 30 fera de vous un développeur beaucoup plus efficace. Le guide des Transformers reste une clé d’entrée fabuleuse !

Petite astuce sur l'insertion des Transformers : En haut : clic sur une connexion. Au centre : commencer à écrire le nom d'un Transformer.En bas : le Transformer est automatiquement ajouté sur la connexion entre les autres blocs.
Petite astuce sur l’insertion des Transformers :
En haut : clic sur une connexion. Au centre : commencer à écrire le nom d’un Transformer.
En bas : le Transformer est automatiquement ajouté sur la connexion entre les autres blocs.

10 – Copier/coller et appliquer les paramétrages sur les types d’entités

Il existe une fonctionnalité pour appliquer des paramétrages sur l’ensemble des types d’entités.

J’utilise également beaucoup l’option permettant de copier/coller ou dupliquer la ligne sur les Transformers similaires ou de même « famille ». Je pense notamment aux Tester/Testfilter, AttributeCreator/AttributeManager pour copier/coller les valeurs conditionnelles. Ces options, comme beaucoup sur FME sont disponibles via un clic droit.

Évidemment, j’use et abuse du copier/coller des Transformers eux-mêmes afin de récupérer des paramétrages similaires à mettre en œuvre.

Loïc Guénin-Randelli

Expert FME · FME Certified Professional · FME Flow Certified Professional · FME Certified Trainer
Expert et formateur FME, fondateur de SITDI France, partenaire de Veremes