Comment FME traite les entités

Par défaut, FME traite les entités sur une base individuelle, c'est-à-dire que chaque entité est traitée séparément dans chaque Transformer avant d'être transmise au suivant. Cela s'explique par le fait que la plupart des Transformers fonctionnent sur la base de la restructuration par entité, où le traitement d'une entité n'affecte pas la suivante. La mesure de la longueur en est un exemple : la mesure de la longueur d'une ligne n'affecte pas la longueur de la suivante.

Cependant, certains Transformers fonctionnent sur la base d'une restructuration par groupe, où le traitement d'une entité affecte effectivement la suivante. La détection des changements en est un exemple : vous ne pouvez pas détecter si une entité a changé à moins de la comparer à toutes les autres entités.

Une conséquence du traitement basé sur les groupes est qu'il affecte la mémoire disponible. Si le processus implique chaque entité du jeu de données, toutes les entités doivent être gardées en mémoire pendant l'exécution du processus, contrairement à un processus basé sur les entités qui peut lire une entité en mémoire et la libérer pour passer à la suivante. Le Transformer Sorter est un bon exemple de fonction de traitement de groupe.

Une deuxième conséquence est que certains Transformers donneront des résultats différents selon la façon dont les entités sont traitées. Par exemple, une combinaison VariableSetter/VariableRetriever peut ne pas donner les résultats escomptés si vous ne tenez pas compte de la manière dont les entités sont traitées (la première entité qui passe par un VariableSetter passera directement par le VariableRetriever et récupérera la valeur qu'elle a elle-même définie - mais si vous insérez un Transformer Sorter entre les entités pour les retenir, la dernière entité passera par le VariableSetter avant que la première ne passe par le VariableRetriever, récupérant ainsi une valeur différente).

Note  Le nombre d'entités écrites correspond en fait au nombre d'entités qui ont été transmises au rédacteur, ce qui n'est pas nécessairement égal au nombre d'entités qui peuvent être visualisées dans FME Data Inspector ou dans le format de destination. Ce que le rédacteur fait avec les entités (s'il les divise, ou même les rejette, etc.) dépend du format individuel. Il n'existe aucun moyen fiable de relayer cette information au noyau FME, qui produit les informations statistiques.

Traitement par lots et traitement des entités

Lorsque le mode par lots est pris en charge, les entités peuvent sembler être sorties par morceaux. Bien que l'ordre des fonctionnalités à partir d'un seul port de sortie reste intact, lorsque des morceaux de fonctionnalités sont sortis par plusieurs ports d'un Transformer (tels que les ports Passed et Failed du Tester), des résultats inattendus peuvent se produire dans les traitements qui reposent sur l'ordre des fonctionnalités à partir de ports de sortie joints. Dans ce cas, nous vous recommandons de ne pas mettre à niveau les Transformers vers leur version 2019.1 ou ultérieure, ou de réviser vos traitements afin qu'ils ne reposent pas sur l'ordonnancement des entités à partir de ports de sortie joints.