Merges the attributes and/or geometry of one set of features onto another set of features, based on matching key attribute values and expressions.

Jump to Configuration

Typical Uses

  • Combining attributes and/or geometry from two different streams of features, based on a common key attribute value or expression.

How does it work?

The FeatureMerger receives two streams of features via its input ports.

Requestor: Requestors are the features that will receive new attributes and/or geometry.

Supplier: Suppliers provide attributes and/or geometry to be merged onto the Requestors.

Matches between Requestor and Supplier are identified according to the Join On configuration in the parameters dialog. The Join conditions can be simple or complex, using attribute values, constants, functions, or a combination of any of these in expression form. Multiple join conditions can be defined (features must meet all conditions to match).

When a Requestor finds a matching Supplier, the attributes and/or geometry from the Supplier are merged onto the Requestor.

  • If the Requestor already has an attribute that the Supplier also has, the Requestor's original value for that attribute can be preserved or overridden.
  • A single Supplier may be used by many Requestors.
  • Many Suppliers can be merged onto a single Requestor.
  • When attribute names conflict, you can choose whether Requestor or Supplier attribute values are maintained by using the Conflict Resolution parameter, and whether null values follow the same behavior by using the Ignore Nulls parameter.

Requestor features match Supplier features when every pair of keys (which support expressions) specified in the Join On table has the same value for both the Requestor and Supplier features.


Usage Notes

  • For simple joins, the FeatureJoiner may provide better performance than the FeatureMerger. However, the FeatureJoiner only accepts attribute values as keys and not constructed expressions, and does not support list attributes. Additionally, the FeatureMerger is able to (optionally) restrict output to one feature in the case of multiple matching Suppliers, whereas the FeatureJoiner will create multiple features for all matches.
  • For complex joins using SQL syntax, or more than two input feature streams, consider using the InlineQuerier.
  • Where multiple FeatureMergers are required, consider using the InlineQuerier instead.
  • If all the data to be queried already exists in a SQL-capable data source, it will be more efficient to use the SQLCreator or SQLExecutor, which allows the queries and filtering of the data to be executed directly by the database before it enters the FME environment.
  • To perform a join between features already in the workspace and data residing in an external database, consider the DatabaseJoiner.
  • To perform a join where the Requestor key is a list attribute, consider using the ListBasedFeatureMerger.
  • To join features on matching geometry, consider the Matcher. The FeatureMerger does not accept geometry as a key.
  • To join all Suppliers to all Requestors when there is no common join value, setting Join On > Requestor and Join On > Supplier to the same constant value (for example, 1 and 1) will merge all to all. Enable Generate List to store multiple matches per feature.

Choosing a Feature Joining Method

Many transformers can perform data joining based on matching attributes, expressions and/or geometry. When choosing one for a specific joining task, considerations include the complexity of the join, data format, indexing, conflict handling, and desired results. Some transformers use SQL syntax, and some access external databases directly. They may or may not support list attribute reading and creation.

Generally, choosing the one that is most specific to the task you need to accomplish will provide the optimal performance results. If there is more than one way to do it (which is frequently the case), time spent on performance testing alternate methods may be worthwhile. Performance may vary greatly depending on the existence of key indexes when reading external tables (as opposed to features already in the workspace).


Input Ports

Output Ports


Editing Transformer Parameters

Using a set of menu options, transformer parameters can be assigned by referencing other elements in the workspace. More advanced functions, such as an advanced editor and an arithmetic editor, are also available in some transformers. To access a menu of these options, click beside the applicable parameter. For more information, see Transformer Parameter Menu Options.

Defining Values

There are several ways to define a value for use in a Transformer. The simplest is to simply type in a value or string, which can include functions of various types such as attribute references, math and string functions, and workspace parameters. There are a number of tools and shortcuts that can assist in constructing values, generally available from the drop-down context menu adjacent to the value field.

Dialog Options - Tables

Transformers with table-style parameters have additional tools for populating and manipulating values.


Processing Behavior


Feature Holding


Dependencies None

FME Community

The FME Community is the place for demos, how-tos, articles, FAQs, and more. Get answers to your questions, learn from other users, and suggest, vote, and comment on new features.

Search for all results about the FeatureMerger on the FME Community.


Examples may contain information licensed under the Open Government Licence – Vancouver and/or the Open Government Licence – Canada.