Question

FeatureJoiner erasing Attribute values during conflict resolution


I sometimes use a FeatureJoiner to correct data fed into the Left port. I use a StringConcatenator and JSONFragementer to generate the corrections, which are fed into the Right port. The FeatureJoiner's Join Mode is set to "Inner"; Join On specifies an Attribute from each feed that match each other 1:1; Attribute Conflict Resolution is set to "Use Right".

 

What I find is that conflict resolution is NOT applied Feature-by-Feature; it's applied to the entire set of joined Features. So, if none of my correction Features correct a particular Attribute in the Left feed, all of the Left Attributes bearing that name are passed through intact. But if even one of my correction Features corrects a particular Left Attribute, the remaining correction Features will replace the value of their corresponding Left Attribute with "<missing>". To avoid this, I have to add that Left Attribute - corrected or not - to every Feature in the StringConcatenator; what a pain!

 

Is this all-or-none approach the intended design?

 

I'm running version 2019.2.3.2 (Build 19825).


4 replies

Userlevel 3
Badge +16

It might be a side effect of bulk mode, that the FeatureJoiner can behave this way because it's working at once across the entire set of data. Try using a FeatureMerger instead, which acts feature-by-feature.

Badge +2

@pbyhistorian​ You might try adding a prefix to you JSON attributes(BulkAttributeRenamer). Then after the join, BulkAttributeRenamer again to strip of the prefix. (actually that might not work in FME 2019 as BulkAttributeRenamer might have the same problem - but it's fixed in later releases)

It might be a side effect of bulk mode, that the FeatureJoiner can behave this way because it's working at once across the entire set of data. Try using a FeatureMerger instead, which acts feature-by-feature.

I'm about to add another data feed to this behemoth; I'll give FeatureMerger a try and then report back.

@pbyhistorian​ You might try adding a prefix to you JSON attributes(BulkAttributeRenamer). Then after the join, BulkAttributeRenamer again to strip of the prefix. (actually that might not work in FME 2019 as BulkAttributeRenamer might have the same problem - but it's fixed in later releases)

I thought of changing Attribute names to bypass FeatureJoiner's Attribute Conflict Resolution entirely, handling it with conditionals in the subsequent AttributeManager instead. But I think you've just given me convincing justification to request that we upgrade: cleaner workflow. I'll see if the latest version can color individual connecting lines; that would help immensely in sprawling workspaces.

Reply