英文:
How to stop an ADF pipeline after a particular number of hours?
问题
我有一个ADF管道,其中包含一个针对文件的for each循环,执行某些只应在停机时间运行的活动。我正在使用触发器启动它,并希望在2小时后,无论是否完成了所有文件的循环,都能够优雅地退出执行。
是否可以在ADF中进行配置?
英文:
I have an ADF pipeline with a for each loop on files and performing some activity that should only run for the downtime hours. I am starting it using a trigger and want it to gracefully exit execution after 2 hours, whether it is done looping through all files or not.
Is there a way to configure it in ADF?
答案1
得分: 0
一种方法是拥有一个单独的流水线,其中包含一个等待活动(2小时),然后是一个网络活动。
网络活动可以调用数据工厂API来发送取消运行请求。
参考:
如何取消流水线运行
通过参考网络活动创建网络活动,并最好使用MSI作为身份验证方式。
另一种方法是使用逻辑应用,它已经内置了任务来创建流水线触发器、取消运行等等。
英文:
One way is to have a separate pipeline which contains a wait activity(2hr) followed by a web activity.
The web activity can call the data factory api to send a cancel run request.
Refer :
How-to-cancel-a-pipeline-run
Creating the web activity by referring the web-activity and preferably using msi as the authentication.
Another method is using logic app, it already builtin tasks to create a pipeline trigger, cancel it etc.
答案2
得分: 0
以下是翻译好的部分:
一种方法是在每次迭代中检查时间差异的 if 活动,如果为 True,则调用 Web 活动使用 REST API 取消管道。
在管道活动之前,使用 @utcnow()
创建一个设置变量活动。
在 ForEach 内,在你的活动之后,使用下面的 if 活动条件。
@equals(div(sub(ticks(utcnow()),ticks(variables('mytime'))),600000000),120)
上述条件检查当前时间与 mytime
变量之间的时间差是否为 2 小时(120 分钟)。
如果结果为 True
,则在 True 活动中添加一个 Web 活动,以使用当前管道运行 ID 使用 REST API 取消管道运行。
您可以阅读 @Andy Leonard 的这篇博客,了解如何在 ForEach 内使用 Web 活动取消当前管道。
英文:
One way to do this is checking the time difference in each iteration in an if activity and if it's True, then call the web activity to cancel the pipeline using the REST API.
Before the pipeline activities, create a set variable activity with @utcnow()
.
Inside the ForEach, after your activity use an if activity with the below condition.
@equals(div(sub(ticks(utcnow()),ticks(variables('mytime'))),600000000),120)
The above conditon checks the time difference between current time and the mytime
variable is 2 hours (120 minutes) or not.
If it results True
, add a web activity in the True activities to cancel the Pipeline run with REST API using current pipeline run id.
You can go through this blog by @Andy Leonard to know about canceling the current pipeline using web activity inside the ForEach.
答案3
得分: 0
我找到了一种方法 - 我在主流程的开头使用了2个变量:
- 用utcnow()设置起始时间
- 使用addtime()设置starttime+duration
流程如下:
-
使用utcnow()将原始时间变量设置为流程的起始时间。
-
使用addtime()设置上次时间值,直到它可以执行为止。
-
使用布尔变量'state'来比较starttime是否小于addtime,并将其设置为true或false。
-
对于循环--> 第一次运行
(
如果要检查'state'变量的活动
(
如果为True-执行流程
如果为False-不执行任何操作
)
--> 再次设置原始时间变量-->与上次时间进行比较,并将状态设置为更新后的值
)
第二次运行......
第三次运行......
当'state'为false时,if语句将运行,直到所有值都耗尽,不执行任何操作。
英文:
I found a way - I used 2 variable at start of the main pipeline :
- to set start time in utc
- to set starttime+duration using addtime()
Flow is like this:
1.Set the original time variable as start time of pipeline using utcnow()
2.Set add time using addtime() to last time value till it can execute
3.Set the boolean variable 'state' to true or false comparing if starttime is less than addtime
4.For loop--> 1st run
(
If activity to check 'state' variable
(
True- execute the flow
False-do nothing
)
-->set the original time variable again -->compare with last time and set state to updated value
)
2nd run ....
3rd run..
when 'state' is false
If will run till for each values are exhausted doing nothing.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论