如何仅使用管道名称来检查Data Factory管道运行的当前状态?

时间:2020-02-18 08:57:15

标签: powershell azure-data-factory azure-data-factory-2

是否可以通过Powershell或API通过仅管道名称来检查Azure数据工厂管道运行的当前状态?

我已经看到您可以使用Get-AzDataFactoryV2PipelineRun,但这需要您拥有pipelinerunid。

我的目标是构建一个脚本,该脚本将首先检查管道运行是否正在运行以及是否触发它。我想避免脚本触发管道运行,以便同时运行多个管道运行。

2 个答案:

答案 0 :(得分:1)

我已经使用PowerShell完成了此工作,尽管我确定有更好的方法,但这是我想出的解决方案。

基本上,它获取从一周前到今天的所有管道运行ID,并对其进行迭代,并且如果发现一个“ InProgress”,它将不会执行任何操作。如果没有管道运行ID处于该状态,则执行它。

您显然需要事先进行身份验证才能运行此程序:

$before = get-date
$after = (get-date).AddDays(-7)
$runIds = Get-AzDataFactoryV2PipelineRun -DataFactoryName $DataFactoryName -ResourceGroupName $ResourceGroupName -LastUpdatedAfter $after -LastUpdatedBefore 
$before
$shouldRun = 1

$runIds | ForEach-Object {
    ## Check for all statuses
    if($_.Status -eq "InProgress"){
        $shouldRun = 0
    }
}

if($shouldRun){
    ## Logic to run pipeline, this is just an example.
    Invoke-AzDataFactoryV2Pipeline -PipelineName $PipelineName -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName
} 

答案 1 :(得分:1)

使用.Net Core SDK

ServiceClientCredentials cred = new TokenCredentials(accessToken);
using (var client = new DataFactoryManagementClient(cred) { SubscriptionId = subscriptionId })
{
    RunQueryFilter filter1 = new RunQueryFilter("PipelineName", "Equals", new List<string> { "ActualPipelineName" });
    RunQueryFilter filter2 = new RunQueryFilter("Status", "Equals", new List<string> { "Queued" });
    DateTime before = DateTime.UtcNow;
    DateTime after = before.AddHours(-4);
    RunFilterParameters param = new RunFilterParameters(after, before, null, new List<RunQueryFilter> { filter1, filter2 }, null);
    PipelineRunsQueryResponse pipelineResponse = client.PipelineRuns.QueryByFactory(resourceGroupName, azureDataFactoryName, param);
    int? QueuedPipelines = pipelineResponse?.Value?.Count;
}

在过滤器1中,可以使用“ In”运算符查询多个PipelineName。

在filter2中,您可以使用ADF的任何有效状态(成功,进行中,已排队等)

使用REST API也可以实现同样的目的。

PS-如果管道数量超过100(对于该特定状态),则可能需要使用Continuation令牌。