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