Как проверить текущее состояние конвейера данных фабрики только с именем конвейера? - PullRequest
0 голосов
/ 18 февраля 2020

Можно ли проверить текущее состояние конвейера данных Azure фабрики данных только с именем конвейера через Powershell или API?

Я видел, что вы можете использовать Get-AzDataFactoryV2PipelineRun, но для этого требуется have the pipelinerunid.

Моя цель - создать скрипт, который сначала проверит, запущен ли конвейер, и если нет, то запустит его. Я хочу, чтобы сценарий не запускал pipelinerun, чтобы одновременно выполнялось несколько конвейеров.

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Я сделал это с PowerShell, хотя я уверен, что есть лучшие способы, это решение, которое я придумал.

В основном он получает все идентификаторы работы конвейера за неделю go и по сей день перебирает каждую из них, и если она найдет «InProgress», она ничего не сделает. Если в этом состоянии нет идентификатора выполнения конвейера, выполните его.

Очевидно, что для выполнения этого вам необходимо предварительно пройти аутентификацию:

$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
} 
0 голосов
/ 27 февраля 2020

Использование. 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.

В фильтре 2 вы можете использовать любой допустимый статус ADF (Успех, InProgress, Queued и т. д. c.)

Этого же можно достичь с помощью REST API.

PS - вам может понадобиться токен продолжения, если количество конвейеров больше 100 (для данного конкретного статуса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...