Output from script snap (Python) is writing incorrect

Hi,

I am using script snap (python) to split comma separated values within one of my source column and making a dynamic update statement from it. However, when I am doing a preview of script output, all the values looks correct but if I look the preview in mapper output which takes input from script snap shows different output i.e. sometimes all the update statements are same and sometime two are same and one is different.

Am I doing something wrong?testchild_2017_09_22.slp (9.2 KB)
iods_record_1.zip (1.1 KB)

Can you clarify in what way they are different?

A document should not be modified once it has been written to the output view. Making a copy of the document avoids issues. Change the loop to create a new wrapper Map

         for item in sourceTables:
             wrapper = java.util.HashMap(in_doc)
             wrapper['query'] = "update iods_staging.{} set record_inserted = true;".format(item)
             self.output.write(wrapper)

Hi Dmiller,

Please find below output from script snap and mapper output. Mapper output has two update statements same which is incorrect, it has to be same like script.

Script Snap:

“query”: “update iods_staging.stg_sf_account_dim_institution set record_inserted = true;”
“query”: “update iods_staging.stg_sf_accountdistict_dim_institution set record_inserted = true;”
“query”: “update iods_staging.stg_sf_recordtype_dim_institution set record_inserted = true;”

Mapper Output:

“query”
“update iods_staging.stg_sf_account_dim_institution set record_inserted = true;”
“update iods_staging.stg_sf_recordtype_dim_institution set record_inserted = true;”
“update iods_staging.stg_sf_recordtype_dim_institution set record_inserted = true;”

Thanks
Aditya

Hi Akidave,

Thanks you so much for your solution. However, I would really appreciate if you could explain me more why we should not modify the document once it has been written to the output view.

Thanks again.

Aditya

Is there a reason you need the Mapper after the Script Snap? Do you plan to modify other information?

If so and there are items like query that should not be modified, then select the Pass through option and don’t specify them in the mapping table.

Hi Dmiller,

In my real mapping I am not using mapper after script, mapper is used to show the output after validation complete.

Thanks
Aditya

If a snap writes a document to output view and then modifies the document, the downstream snap might pick up the updated document value, not the document originally written. For performance reasons, a deep copy is not done automatically when the document is written to the output view.

Creating a Map in the script works in this case since the Script is changing only the top level keys. If the Script was changing the contents of the nested map, then a deep copy would be required in the Script

Thank you so much Akidave