How FME Processes Features

By default, FME processes features on an individual basis; that is, each feature is processed separately within each transformer before being passed on to the next. This is because most transformers work on Feature-Based Restructuring, where the processing of one feature does not affect the next. Length measurement is one example of this: measuring the length of a line doesn't affect the length of the next.

However, some transformers work on Group-Based Restructuring where the processing of one feature DOES affect the next. Change Detection is one example of this: you can't detect whether a feature has changed unless you compare it against every other feature.

One consequence of group-based processing is that it affects available memory. If the process involves every feature in the dataset, all features must be held in memory while the process is carried out, as opposed to a feature-based process which can read a feature into memory and release it to move onto the next. The Sorter transformer is a good example of the group-processing type of function.

A second consequence is that some transformers will give different results depending on how features are being processed. For example, a VariableSetter/VariableRetriever combination may not give the expected results if you don't consider how features are being processed (the first feature through a VariableSetter will go straight through the VariableRetriever and retrieve the value it set itself - but if you insert a Sorter transformer between to hold up the features then the last feature will pass the VariableSetter before the first passes the VariableRetriever, thus retrieving a different value).

Note: The number of features written really means the number of features that were passed to the writer, which is not necessarily equal to the number of features that can be viewed in the FME Data Inspector or in the destination format. What the writer does with the features (whether it splits them, or even rejects them, etc.) is dependent on the individual format. There is no reliable way of relaying that information back to the FME core, which outputs the statistics information.

Bulk Mode and Feature Processing

Where bulk mode is supported, features may appear to output in bunches. Although feature order from a single output port remains intact, when bunches of features are output through multiple ports of a transformer (such as the Passed and Failed ports of the Tester), unexpected results may occur in workspaces that rely on feature ordering from joined output ports. In these scenarios, we recommend that you do not upgrade any transformers to their 2019.1 or later versions, or revise your workspaces so they do not rely on feature ordering from joined output ports.