02-25-2024 10:08 PM
Hi All,
I am looking to simply parse out the snaps used in a pipeline using the metadata read snap. However, I am having trouble getting the output of the snap_map.property_map.info.label.value to display correctly out of the mapper. I tried to set the mapping root as $snap_map[*], but that does not seem to work. Ideally, I would like to get a final table with pipeline_id, pipeline_name, snap_map_id, snap_map_name. May someone help me with this? Thanks.
Solved! Go to Solution.
02-26-2024 12:09 AM - edited 02-26-2024 12:09 AM
Hi @kindminis ,
You can try the following expression in the mapper snap after the SnapLogicRead snap.
$snap_map.keys().map(x=> {"PipelineId":$_id,"PipelineName":$property_map.info.label.value,"SnapId":$snap_map.get(x).instance_id,"SnapName":$snap_map.get(x).property_map.info.label.value})
This expression will iterate over all snaps included in the $snap_map and produce an array with your expected elements. You will also need the JSON Splitter snap to get the table form.
BR.
Ivica.
02-26-2024 12:09 AM - edited 02-26-2024 12:09 AM
Hi @kindminis ,
You can try the following expression in the mapper snap after the SnapLogicRead snap.
$snap_map.keys().map(x=> {"PipelineId":$_id,"PipelineName":$property_map.info.label.value,"SnapId":$snap_map.get(x).instance_id,"SnapName":$snap_map.get(x).property_map.info.label.value})
This expression will iterate over all snaps included in the $snap_map and produce an array with your expected elements. You will also need the JSON Splitter snap to get the table form.
BR.
Ivica.
02-26-2024 09:22 AM
Hi Ivica,
Thank you for this, as a follow up question. If I want to capture a field that does not always exist in property_map, how would I write the expression? In this case I want to capture property_map.settings.sqlStatement.value if it is present. Thanks.
02-28-2024 01:48 PM
Hi @kindminis ,
You just need to extend the object with another element ie. the key and the corresponding value for that key. There are two ways to achieve this:
$snap_map.keys().map(x=> {"PipelineId":$instance_id,"PipelineName":$property_map.info.label.value,"SnapId":$snap_map.get(x).instance_id,"SnapName":$snap_map.get(x).property_map.info.label.value,"SqlStatement":$snap_map.get(x).property_map.settings.hasPath("sqlStatement") ? $snap_map.get(x).property_map.settings.sqlStatement.value : "" })
2. Check the null-safe access option in the mapper and map the required source path to the value. If property_map.settings.sqlStatement.value does not exist, missing data will be ignored and a null value will be produced:
$snap_map.keys().map(x=> {"PipelineId":$instance_id,"PipelineName":$property_map.info.label.value,"SnapId":$snap_map.get(x).instance_id,"SnapName":$snap_map.get(x).property_map.info.label.value,"SqlStatement":$snap_map.get(x).property_map.settings.sqlStatement.value})
To summarize, in approach #1, if property_map.settings.sqlStatement.value will not be present, an empty string will be produced, in approach #2, null will be produced.
Hope this helps!
BR.
Ivica