使用 Powershell 如何按运行 ID 在 Azure 数据工厂中重新运行失败的管道?



在 Azure 数据工厂中,我需要重新运行大约 4000+ 个失败的管道。可以在 Azure 门户 UI 中执行此操作,但我尝试在 Powershell 中自动执行运行过程。

我无法在 powershell 中找到命令/步骤,以按运行 ID 对失败的管道进行 ru-run。

我在寻找同一问题的解决方案时发现了这个问题,所以这是我发现的答案。

如果要重新运行整个管道,并且不关心数据工厂在技术上将其视为重新运行,可以使用Get-AzDataFactoryV2PipelineRuncmdlet 获取运行列表,筛选到失败的运行,然后在调用Invoke-AzureRmDataFactoryV2Pipeline

看起来很快 cmdlet 将更新为允许真正的重新运行(基于某人在 Microsoft 年的可视化监视 Azure 数据工厂文档中提出的对此问题的响应)。

如果您急于能够进行真正的重新运行,该功能已包含在 REST API 中,方法是使用一些可选参数调用createRun

编辑:这已添加到 2020 年 10 月发布的 Azure PowerShell 模块 v4.8.0 中(文档)。现在,可以使用-ReferencePipelineRunId将管道运行 ID 传递给Invoke-AzDataFactoryV2Pipelinecmdlet,使其使用该运行中的参数。还可以使用-StartFromFailure开关使其仅重新运行失败的活动。

我只是找到了一个教程 Azure 数据工厂:检测并重新运行失败的 ADF 切片,它提供了用于自动执行失败管道的 Powershell 脚本。

Powershell脚本:

Login-AzureRmAccount
$slices= @()
$tableName=@()
$failedSlices= @()
$failedSlicesCount= @()
$tableNames=@()
$Subscription="Provide Subscription ID"  
Select-AzureRMSubscription -SubscriptionId  $Subscription    
$DataFactoryName="Provide Data Factory Name"
$resourceGroupName ="Porvide Resource Group Name for Data Factory"
$startDateTime ="2015-05-01" #Start Date for Slices
$endDateTime="2015-08-01" # End Date for Slices

#Get Dataset names in Data Factory - you can exlicitly give a table name using $tableName variable if you like to run only for an individual tablename
$tableNames = Get-AzureRMDataFactoryDataset -DataFactoryName $DataFactoryName -ResourceGroupName $resourceGroupName | ForEach {$_.DatasetName}
$tableNames #lists tablenames
foreach ($tableName in $tableNames)
{
$slices += Get-AzureRMDataFactorySlice -DataFactoryName $DataFactoryName -DatasetName $tableName -StartDateTime $startDateTime -EndDateTime $endDateTime -ResourceGroupName $resourceGroupName -ErrorAction Stop
}

$failedSlices = $slices | Where {$_.Status -eq 'Failed'}
$failedSlicesCount = @($failedSlices).Count
if ( $failedSlicesCount -gt 0 ) 
{
write-host "Total number of slices Failed:$failedSlicesCount"
$Prompt = Read-host "Do you want to Rerun these failed slices? (Y | N)" 
if ( $Prompt -eq "Y" -Or $Prompt -eq "y" )
{
foreach ($failed in $failedSlices)
{
write-host "Rerunning slice of Dataset "$($failed.DatasetName)" with StartDateTime "$($failed.Start)" and EndDateTime "$($failed.End)"" 
Set-AzureRMDataFactorySliceStatus -UpdateType UpstreamInPipeline -Status Waiting -DataFactoryName $($failed.DataFactoryName) -DatasetName $($failed.DatasetName) -ResourceGroupName $resourceGroupName -StartDateTime "$($failed.Start)" -EndDateTime "$($failed.End)" 

}
}
}
else
{
write-host "There are no Failed slices in the given time period."
}

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新