概要
Azure Data Factory(ADF)でアクティビティのエラーメッセージを取得する方法を調べた際のメモです。
ADFではアクティビティのsuccess, fail, skip, completeというステータスコードを条件に依存関係を定義できるので、エラーが起きたら通知用のパイプラインを呼び出すといった実装は容易にできます。
ただ、直前のアクティビティでのエラーメッセージの取得には少し工夫が必要です。
実装方法
今回は、Execute Pipelineアクティビティにおけるエラーメッセージを取得する方法を紹介します。
※他のアクティビティでも同様に実装が可能だと思います。
まず、Failアクティビティのみを実行するraise_errパイプライン(c_raise_err.json
)を作成します。
Failアクティビティではエラーコード408
でtimeout
というエラーメッセージを出力するよう設定します。
※先頭のc, pはchild, parentの頭文字です。
{
"name": "raise_err",
"properties": {
"activities": [
{
"name": "raise-err",
"type": "Fail",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"message": "timeout",
"errorCode": "408"
}
}
],
"folder": {
"name": "sample"
},
"annotations": []
}
}
次にraise_errパイプラインを呼び出し、そのエラーメッセージを変数err
に設定するmainパイプライン(p_main.json
)を作成します。
{
"name": "main",
"properties": {
"activities": [
{
"name": "set-err-msg",
"type": "SetVariable",
"dependsOn": [
{
"activity": "exec-pipeline",
"dependencyConditions": [
"Failed"
]
}
],
"userProperties": [],
"typeProperties": {
"variableName": "err",
"value": {
"value": "@activity('exec-pipeline').error.Message",
"type": "Expression"
}
}
},
{
"name": "exec-pipeline",
"type": "ExecutePipeline",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"pipeline": {
"referenceName": "raise_err",
"type": "PipelineReference"
},
"waitOnCompletion": true
}
}
],
"variables": {
"err": {
"type": "String"
}
},
"folder": {
"name": "sample"
},
"annotations": []
}
ADFコンソール(GUI)では以下の表示になります。
上記2つのパイプラインを作成後に実行します。
すると、ADFコンソールで変数err
を確認すると、アクティビティのエラーメッセージが取得できていることを確認できました。
最後に
ADFではアクティビティの入出力はjsonで記述されています。
基本、アクティビティの出力結果はJSONPathでクエリできると思っておけば大丈夫です。
参考リンク