Airflow 每两周安排一次气流作业
我有一个要求,我想安排一个气流作业每隔周五。然而,问题是我无法想出如何为此编写时间表 我不想为此有多份工作 我试过这个Airflow 每两周安排一次气流作业,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我有一个要求,我想安排一个气流作业每隔周五。然而,问题是我无法想出如何为此编写时间表 我不想为此有多份工作 我试过这个 '0 0 1-7,15-21 * 5 但是它不起作用,每天从1点到7点,从15点到21点 从shubham的回答中,我意识到我们可以有一个蟒蛇操作员,它可以为我们跳过任务。我试图实现这个解决方案。然而,这似乎不起作用 因为在2周内进行测试太困难了。这就是我所做的 我计划DAG每5分钟运行一次 然而,我正在编写python操作符skip althernate任务(非常类似于我
'0 0 1-7,15-21 * 5
但是它不起作用,每天从1点到7点,从15点到21点
从shubham的回答中,我意识到我们可以有一个蟒蛇操作员,它可以为我们跳过任务。我试图实现这个解决方案。然而,这似乎不起作用
因为在2周内进行测试太困难了。这就是我所做的
- 我计划DAG每5分钟运行一次
- 然而,我正在编写python操作符skip althernate任务(非常类似于我要做的,备用星期五)
args={
“所有者”:“高朗沙阿”,
“重试次数”:0,
“开始日期”:气流.utils.dates.days(1),
}
dag=dag(
dag_id='test_dag',
默认值_args=args,
catchup=False,
计划时间间隔='*/5****',
最大有效运行次数=1
)
dummy\u op=DummyOperator(任务id=dummy',dag=dag)
定义检查日期(执行日期,**上下文):
min_date=datetime.now()-relativedelta(分钟=10)
打印(上下文)
打印(context.get(“上一次执行日期”))
打印(执行日期)
打印(datetime.now())
打印(最小日期)
如果执行日期>最小日期:
引发AirflowSkipException(f“此执行日期({execution\u date})没有可用数据”)
check_date=PythonOperator(
task\u id=“检查\u如果\u最小\u日期”,
python\u callable=\u check\u date,
提供上下文=True,
dag=dag,
)
- 我怀疑一个
表达式crontab
- 使用
的技巧,解决方案更加简单:气流
- 安排你的DAG每周五和周五
- 每隔一个星期五(根据您的业务逻辑),通过提高工资跳过DAG
任务开始,该任务将让你的DAG每隔一个星期五运行/跳过一次skip_decider
- 有条件地提升
(跳过DAG)气流SkipException
- 没有做任何事情让DAG跑
你也可以利用
气流异常
是最干净的解决方案
参考资料:您可以使用下面提到的timedelta,将其与开始日期结合起来,每两周安排一次工作
dag = DAG(
dag_id='test_dag',
default_args=args,
catchup=False,
start_date=datetime(2021, 3, 26),
schedule_interval=timedelta(days=14),
max_active_runs=1
)
似乎是个不错的替代品。。你能告诉我如何跳过第二轮吗?@Gaurang Shah,谢谢你的回复。我浏览了这篇文章,但是我不理解其中的逻辑<代码>执行日期>(datetime.datetime.now()-relativedelta(weeks=1))不会超出日期
和dateime.datetime.now
相同。“我测试过了,两者都是一样的。”高朗·沙阿读了标题为“谢谢你的帖子”的一节。我理解不同。在我的例子中,两者显示相同,只有5-10秒的差异。我创建了一个5分钟触发的dag。。如果持续时间少于10分钟,我会跳过任务。。但是它不起作用。。可能我会在这里提出一个新问题或更新。这不能像每个月的天数一样有效。