Solved

Is it possible to remove hidden attributes without having to expose them first?

  • 20 July 2017
  • 6 replies
  • 56 views

Userlevel 1
Badge +21

Transformers such as the matcher appear to use hidden attributes to match on when the attribute matching strategy is set to match all attributes. Is it possible to remove hidden attributes without exposing them first?

icon

Best answer by david_r 20 July 2017, 11:57

View original

6 replies

Userlevel 5

You can use the BulkAttributeRemover.

Userlevel 1
Badge +21

You can use the BulkAttributeRemover.

 

Doesn't appear to let you remove any hidden attributes that start with fme_
Userlevel 5

You're right, it seems like the fme_* attributes enjoy some special protection by the BulkAttributeRemover.

Try this Python script in a PythonCaller instead:

import fmeobjects
def RemoveFMEAttributes(feature):
    for attrib in feature.getAllAttributeNames():
        if attrib.startswith('fme_'):
            feature.removeAttribute(attrib)

Tested with FME 2017 and seems to do the job.

Userlevel 3
Badge +17

You're right, it seems like the fme_* attributes enjoy some special protection by the BulkAttributeRemover.

Try this Python script in a PythonCaller instead:

import fmeobjects
def RemoveFMEAttributes(feature):
    for attrib in feature.getAllAttributeNames():
        if attrib.startswith('fme_'):
            feature.removeAttribute(attrib)

Tested with FME 2017 and seems to do the job.

There is an extremely convenient method if you want to remove every fme_* attribute :-)

 

def removeFMEAttributes(feature):
    feature.removeAttrsWithPrefix('fme_')

 

Userlevel 3
Badge +17

Alternatively, the FMEFunctionCaller with this function call setting could also work fine.

@RemoveAttributes(fme_pcre_match,^fme_)

You're right, it seems like the fme_* attributes enjoy some special protection by the BulkAttributeRemover.

Try this Python script in a PythonCaller instead:

import fmeobjects
def RemoveFMEAttributes(feature):
    for attrib in feature.getAllAttributeNames():
        if attrib.startswith('fme_'):
            feature.removeAttribute(attrib)

Tested with FME 2017 and seems to do the job.

...and don't forget about the "multi_reader_*" FME feature attributes, and the format-specific attributes like "geodb_*" for Esri Geodatabases. Also beware of the OBJECTID and SHAPE.LEN and SHAPE.AREA if they have been accidentally included in the User Attributes for some Esri formats.

Reply