AzSynapseDatasetDependencies.psm1
<#
.SYNOPSIS This Command provide the list of Pipelines, Dataflows that depend on the Dataset within Synapse. .DESCRIPTION This function provides the list of Pipelines, Dataflows that depend on the Dataset within Synapse. .PARAMETER WorkspaceName The WorkspaceName of Synapse .PARAMETER DatasetName The name of the Dataset in Synapse. .EXAMPLE Get-AzSynapseDatasetDependencies -WorkspaceName "<<WorkspaceName>>" Get-AzSynapseDatasetDependencies -WorkspaceName "<<WorkspaceName>>" -DatasetName "<<DatasetName>>" #> Function Get-AzSynapseDatasetDependencies { Param ( [Parameter(Mandatory=$true)] [string] $WorkspaceName , [Parameter(Mandatory=$false)] [string] $DatasetName ) $htDependee=@{} IF(!$DatasetName) { $AllDataset=Get-AzSynapseDataset -WorkspaceName $WorkspaceName } ELSE { $AllDataset=Get-AzSynapseDataset -WorkspaceName $WorkspaceName -Name $DatasetName } $AllPipeline=Get-AzSynapsepipeline -WorkspaceName $WorkspaceName $AllDataflow=Get-AzSynapseDataflow -WorkspaceName $WorkspaceName for ($i=0;$i -lt $AllDataset.Count ; $i++) { $DSDependantObjects=@() #Iteration of pipelines for ($j=0;$j -lt $AllPipeline.Count ; $j++) { $DSMatch=@() $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Dataset.ReferenceName #outer activities $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Inputs.ReferenceName #outer Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.outputs.ReferenceName #outer Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.IfTrueActivities.Dataset.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.IfTrueActivities.Inputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.IfTrueActivities.outputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.IfFalseActivities.Dataset.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.IfFalseActivities.Inputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.IfFalseActivities.outputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.DefaultActivities.Dataset.ReferenceName #Switch Default outer $DSMatch=$DSMatch+$AllPipeline[$j].Activities.DefaultActivities.Inputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.DefaultActivities.Outputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Cases.Activities.Dataset.ReferenceName #Switch case outer $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Cases.Activities.Inputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Cases.Activities.outputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.Dataset.ReferenceName #Foreach / until $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.Inputs.ReferenceName #Foreach / until copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.outputs.ReferenceName #Foreach / until copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.IfTrueActivities.Dataset.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.IfTrueActivities.Inputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.IfTrueActivities.outputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.IfFalseActivities.Dataset.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.IfFalseActivities.Inputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.IfFalseActivities.outputs.ReferenceName #Outer IF $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.DefaultActivities.Dataset.ReferenceName #Switch Default outer $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.DefaultActivities.Inputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.DefaultActivities.Outputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.Cases.Activities.Dataset.ReferenceName #Switch case outer $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.Cases.Activities.Inputs.ReferenceName #Switch Copy $DSMatch=$DSMatch+$AllPipeline[$j].Activities.Activities.Cases.Activities.outputs.ReferenceName #Switch Copy $DSMatch=$DSMatch |Select -Unique foreach ($ite in $DSMatch) { if($ite -eq $AllDataset[$i].Name) { $DSDependantObjects=$DSDependantObjects+$AllPipeline[$j].Name } } } #Iteration of Dataflows for ($j=0;$j -lt $AllDataflow.Count ; $j++) { $DSMatch=@() $DSMatch=$DSMatch+$AllDataflow[$j].Properties.Sources.Dataset.ReferenceName $DSMatch=$DSMatch+$AllDataflow[$j].Properties.Sinks.Dataset.ReferenceName $DSMatch=$DSMatch |Select -Unique foreach ($ite in $DSMatch) { if($ite -eq $AllDataset[$i].Name) { $DSDependantObjects=$DSDependantObjects+$AllDataflow[$j].Name } } } if($DSDependantObjects.count -ne 0) { if ($htDependee.ContainsKey($AllDataset[$i].Name)) { FOREACH($DSDep in $DSDependantObjects){ if ($htDependee[$AllDataset[$i].Name] -notcontains $DSDep) { $htDependee[$AllDataset[$i].Name] += $DSDep } } } else{ FOREACH($DSDep in $DSDependantObjects){ if ($htDependee[$AllDataset[$i].Name] -notcontains $DSDep) { $htDependee[$AllDataset[$i].Name] += ,$DSDep } } } } } for ($i=0;$i -lt $AllDataset.Count ; $i++) { if($htDependee.ContainsKey($AllDataset[$i].Name)) { write-host $AllDataset[$i].Name 'has' $($htDependee[$AllDataset[$i].Name]).Count 'Dependencies' Write-Host $AllDataset[$i].Name "is used in" $($htDependee[$AllDataset[$i].Name]) `n } else { write-host $AllDataset[$i].Name "has no / 0 Dependency" `n } } } Export-ModuleMember -Function Get-AzSynapseDatasetDependencies |