Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Airflow 每两周安排一次气流作业_Airflow_Airflow Scheduler - Fatal编程技术网

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任务(非常类似于我要做的,备用星期五)
DAG:

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)
    • 没有做任何事情让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分钟,我会跳过任务。。但是它不起作用。。可能我会在这里提出一个新问题或更新。这不能像每个月的天数一样有效。