
こんにちは!やましー@データ活用クラウドエンジニア(@yamashi18041)です!
私はMicrosoftのクラウドサービスである、Azure上にデータ基盤を作る仕事をしています。
データ基盤を作るときに必要になってくるETL(抽出、変換、格納)。
AzureにはData FactoryというPaaS(Platform as a Service)があり、そのパイプラインでETLを実現することができます。
今回プロジェクトで、コード上からData Factoryのパイプラインを実行するため、以下の公式ドキュメントサイトを参考にコーディングしたところ、不備が見つかったのでその解説をしたいと思います。(この記事は2020年3月10日に執筆しています。)
PoawerShellで実行パイプラインを実行する

この記事によればデータファクトリのパイプラインを実行し、そのステータスを監視することになっています。
Invoke-AzDataFactoryV2Pipelineによりパイプラインを実行。
$RunId = Invoke-AzDataFactoryV2Pipeline `
-DataFactoryName $DataFactory.DataFactoryName `
-ResourceGroupName $ResGrp.ResourceGroupName `
-PipelineName $DFPipeLine.Name
実行ステータスを監視する
次にGet-AzDataFactoryV2PipelineRunを使い実行ステータスを監視し、処理の終了を待ちます。
while ($True) {
$Run = Get-AzDataFactoryV2PipelineRun `
-ResourceGroupName $ResGrp.ResourceGroupName `
-DataFactoryName $DataFactory.DataFactoryName `
-PipelineRunId $RunId
if ($Run) {
if ($run.Status -ne 'InProgress') {
Write-Output ("Pipeline run finished. The status is: " + $Run.Status)
$Run
break
}
Write-Output "Pipeline is running...status: InProgress"
}
Start-Sleep -Seconds 10
}
8行目で”InProgress”である場合はパイプライン処理実行中であるため、10秒sleepして監視を繰り返します。
StatusはQueuedも返ってくる
これを実装してみましたが、挙動が怪しく、本当に”InProgress”だけを監視し続ければよいのか疑問を持ったので確認してみたところ”Queued”も返ってくることが分かりました。

Queuedとはパイプライン実行させたときに処理待ちのQueueにある状態で、この状態は待つ必要があります。
どのようなステータスが返ってくるか調べてみた
そうなってくると他にどのようなStatusがあるのか気になってきたので、いろいろ調べてみました。
公式のドキュメントはありませんが、Microsoft公式のドキュメントを管理するGitHubでコメントがありました。
Azure Data Factoryで返ってくるStatus一覧
- Queued
- InProgress
- Succeeded
- Failed
- Cancelled
- Canceling
この中で処理を待つ必要があるのはQueuedとInProgressだけのようです。
Queuedも加味したコード
ということで監視のコードを改造。
while ($True) {
$Run = Get-AzDataFactoryV2PipelineRun `
-ResourceGroupName $ResGrp.ResourceGroupName `
-DataFactoryName $DataFactory.DataFactoryName `
-PipelineRunId $RunId
if ($Run) {
switch ($run.Status) {
'Queued' {}
'InProgress' {}
default {
Write-Output ("Pipeline run finished. The status is: " + $Run.Status)
$Run
break PiplineEnd
}
}
Write-Output "Pipeline is running...status: $Run.Status"
}
Start-Sleep -Seconds 10
}:PiplineEnd
これでQueuedの場合も確実に待つようになりました。
まとめ
今回はAzure Data Factoryのパイプラインの実行ステータスについて調べてみました。
公式ドキュメントにあるサンプルコードでもしっかりと検証が必要という事を忘れずに、クラウドを手なずけていきましょう!
Azure Data Factoryについてより詳しく知りたい方はこちらの記事もどうぞ。
最後まで読んでいただきありがとうございました。
以上、やましー@データ活用クラウドエンジニア(@yamashi18041)でした。