A force d’échanger sur le sujet et d’avoir de nombreux workspaces entre les mains, je me suis rendu compte que de nombreuses personnes utilisant FME Form confondaient plusieurs constituants du workspace, voir même n’en connaissait tout simplement pas certains éléments pourtant très importants.
En effet, un workspace, ce n’est pas qu’un Reader, un Writer et toute une série de transformers ; c’est une multitude d’autres éléments que je vais vous faire découvrir.
Workspace : espace de travail
Il s’agit du fichier de projet FME qui contient la description de la traduction à opérer.
Et si certain l’appelle « script », mieux vaut lui préférer le terme « workspace » car il est possible de mettre des scripts (Python, SQL…) au sein d’un workspace.
Translation : traduction
Il s’agit du processus de traitement des éléments. Le terme original est translation (en anglais) qui correspond à « traduction » dans notre langue. C’est le terme utilisé car FME permet le dialogue entre deux modèles de données différents.
J’entends souvent dire « une translation », comme si on déplaçait les données. Dans un sens ce n’est pas faux, la données est déplacée mais il ne s’agit pas du terme exact.
Reader/Writer : connexion de lecture/connexion d’écriture
Un Reader ou Writer est une connexion vers une source de données. Selon le type de connexion il peut s’agir de :
- un (ou plusieurs) fichier(s) ou encore un (ou plusieurs) répertoire(s) par exemple avec les connexions Excel, Shapefile, Autocad ou CSV.
- une base de données par exemple avec les connexions PostgreSQL ou Oracle
Notez que les Reader/Writer sont capables de lire/écrire dans les documents zip.
Vous trouverez ces éléments tout en haut du navigateur.
Feature type : type d’objet
Ce sont les tables sources (ou de destination) et non, on ne les appelles pas les Reader/Writer, comme je l’entends souvent…
Selon le Reader/Writer utilisé, un feature type ne correspond pas au même élément :
- Excel : une feuille d’un classeur
- Shapefile : un fichier shape
- PostgreSQL : une table
- Autocad : un calque
- CSV : un fichier
Un feature type est obligatoirement associé à un Reader ou à un Writer.
Attention, lorsqu’un Reader est connecté à plusieurs sources (par exemple à plusieurs répertoires), le feature type correspond à tous les fichiers portants le même nom identifiés par le Reader, peut importe leurs emplacements. Toutes les données de ces différentes sources seront alors fusionnées et arriveront dans le workspace par le même feature type et potentiellement avec des structures différentes (selon la source physique).
Feature : objet
Un objet est l’équivalent d’une ligne de données, ce sont les éléments qui sont lus dans une table puis traduits par FME.
Transformer
Un transformer est un outil permettant de manipuler les objets. Plusieurs centaines de transformers sont fournis par défaut mais vous pouvez créer les vôtres : les transformers personnalisés.
La bibliothèque des transformers vous permet de les retrouver sous forme de liste organisée en thématiques mais vous pouvez aussi les rechercher en commençant à taper le nom du transformer lorsque rien n’est sélectionné dans l’interface. Une barre de recherche s’ouvre alors automatiquement.
Notez que les transformers ont souvent un nom facilement identifiable reprenant le nom anglais de la fonction opérée tout en rimant avec « Terminator » ou « Avenger » (oui je sais c’est épique…). Voici quelques exemples :
- Exécuter du SQL dans une base : SQLExecutor
- Créer un objet vide : Creator
- Reprojeter des données : Reprojector
- Échantillonner des données : Sampler
- Fusionner des données : FeatureMerger
Sachez également que sur un transformer, les entrées et les sorties peuvent être réorganisées via un clic droit :
Titre n’est pas nom de fichier
Les workspaces peuvent avoir un titre qui est différent du nom du fichier. Cela se configure dans les paramètres du workspace :
Description
Vous pouvez décrire ce que fait votre workspace et comment l’utiliser dans la même interface que celle permettant d’éditer le titre.
Historique
Pour indiquer les évolutions du workspace, un historique est disponible dans la même interface que celle permettant d’éditer le titre :
Feature cached
Il est possible de mettre en cache les données à chaque étape de la traduction pour tester cette dernière et vérifier les traitements opérés par les transformers. Pour cela, il suffit d’activer l’option « Enable feature caching » du menu « Run ».
Ce cache peut être consulté au niveau de chaque transformer :
Attention, l’utilisation du cache entraine la création et le stockage d’une copie de chaque objet pour chaque transformer dans lequel il passe. Cela implique donc une grosse consommation d’espace disque et un ralentissement important de la traduction (entre 2 et 100 fois plus lent). Pensez donc à désactiver l’option lorsque vous n’effectuez plus de tests.
Paramètres
Dans un workspace, des paramètres peuvent être configurés. Il s’agit de variables dont la valeur est définie lors du lancement de la traduction. Plusieurs types de paramètres existent :
- Paramètres utilisateurs : il s’agit de paramètres créés par l’auteur du workspace et qui peuvent être soumis à modification par l’utilisateur du workspace lors du lancement de la traduction.
- Paramètres FME : ce sont des paramètres contenant des valeurs récupérées par FME lors de l’initialisation de la traduction (par exemple l’emplacement du workspace, le système d’exploitation…).
- Paramètres FME Flow : ce sont des paramètres FME spécifiques qui peuvent être initialisé pour FME Flow.
Dans le menu « Run », il est possible d’activer l’option pour afficher les paramètres utilisateurs au lancement de la traduction grâce à l’option « prompt for parameters ».
Schema des données
Le schema représente une structure des données (une liste de colonnes associées à leurs types) permettant à FME de créer une table. Il est donc presque exclusivement utilisé dans le cas des features types dynamiques.
Différents schémas cohabitent au sein d’un workspace :
- Les schémas que je qualifie de « schémas sources », qui sont récupérés par FME pour chaque feature type de chaque Reader et qui correspondent à la structure des données source.
- Les schémas que je qualifie de « schémas ressources », qui sont récupérés par FME par l’intermédiaire des Reader ressources ce qui permettent d’importer des schémas supplémentaires dans le workspace (menu « Reader » puis « Add Reader as Resource »).
- Les schémas que je qualifie de « schemas d’objets », qui sont générés volontairement par l’auteur du workspace, soit via un transformer associant à chaque objet un schéma correspondant à sa structure comme schemamapper ; soit en créant manuellement le schéma via AttributeCreator par exemple.
Les schemas lus par un Reader ne sont pas directement accessibles, seul un feature type dynamique peut les lire. Au contraire, les « schémas d’objet » sont eux associés aux objets sous la forme d’attributs ; de 0 à n fois les deux attributs suivants (selon le nombre d’attributs listés dans le schéma) :
attribute{0}.fme_data_type
: type de donnéesattribute{0}.name
: nom du champ
Dans un feature type dynamique, il est possible de choisir l’origine du schéma qui définit la table à créer :
Notez qu’en plus de définir le Reader d’origine, le nom du schéma spécifique à utiliser doit être préciser. Les schémas récupérés par FME sont nommés d’après leurs tables d’origines, il peu donc y avoir des conflits si un même Reader permet la lecture de deux tables portant le même nom mais avec une structure différente.
Les attributs : abscents, cachés, exposés
Lorsqu’un objet est traduit dans FME, ce dernier fait la distinction entre :
- Les attributs de l’objet.
- Les attributs de la ligne de traitement que suit l’objet.
C’est une notion très importante car cela signifie que pour un objet :
- Des attributs lui appartenant peuvent ne pas apparaitre dans le workspace, on parle d’attributs non exposés.
- Des attributs lui appartenant peuvent apparaitre dans le workspace, on parle d’attributs exposés.
- Des attributs ne lui appartenant pas peuvent apparaitre sur sa ligne de traitement, on parle d’attribut absent (ou missing).
Prenons cet exemple de workspace :
Si j’analyse un objet (le numéro 1, issu de l’AttributeCreator) à l’issue de l’AttributeManager, en fin de traitement :
Vous pouvez voir que :
- Les attributs
A1
,A2
etX
sont peuplés et exposés (visibles dans le workspace). - Les attributs
B1
etB2
sont exposés mais absents.
C’est parce qu’ils sont récupérés par FME depuis la branche provenant de l’AttributeCreator_2.
L’objet identifié ici ne possède pas ces attributs comme on peut le constater dans les informations sur la droite. - Les attributs
fme_feature_type
,fme_geometry
etfme_type
ne sont pas exposés.
L’objet les possède mais ils ne sont pas révélés dans le workspace.
Vous noterez que pour le second objet, se sont les attributs A1
et A2
qui sont absents.
Dans FME, les attributs exposés sont les attributs utilisables dans un transformer et correspondent à une liste de l’ensemble des attributs exposés en amont du transformer. Ils sont listés en sortie de ce dernier accompagnés d’éventuels nouveaux attributs créés par le transformer.
Dans le workspace il faut donc anticiper les possibilités pour un objet d’avoir d’autres attributs que ceux exposés ou au contraire que ces derniers n’existent pas.
Il est possible de gérer ces différents cas :
Lorsqu’un attribut doit être exposé, les transformers AttributeExposer ou AttributeManager peuvent être utilisés. Certains transformers permettant la création ou la modification d’objet en dehors de FME (PythonCaller, PythonCreator, SQLExecutor et SQLCreator) intègrent un champs spécifique pour exposer d’éventuels nouveaux attributs.
A l’inverse, lorsqu’un attribut est absent, il est possible de :
- filtrer l’objet, FME propose la valeur
missing
comme critère de filtre (à l’instar de la valeurNULL
et de la valeur''
(vide)) ; - fixer la colonne en lui attribuant une valeur spécifique (
NULL
,''
(vide) ou autre) grâce à un transformer comme NullAttributeMapper.
Lors de l’écriture, les attributs absents se verront attribuer la valeur NULL
.
Cet article vous a plu ?
N'hésitez pas à le partager, il interessera surement certains de vos contacts.
Les thèmes suivants contiennent des articles en lien avec celui-ci, allez faire un tour :
FMESIG feature typemissingreaderschematranslationwriter