是否可以创建一个除周六和周日之外每天运行的Airflow DAG?由于您只有开始日期和 schedule_interval ,因此似乎不可能。
我正在设置一个工作流程,它将每天早晨处理一批文件。尽管只有星期一到星期五,这些文件不会在周末出现。我可以简单地使用24小时超时设置,这实际上会使星期六和星期日超时,因为该文件在那几天永远不会出现,但这将DAG标记为这两天都失败了,这将非常令人愉快。
答案 0 :(得分:6)
Zack的答案已经有一个工作日的cron时间表,该时间表可以满足您的要求(0 0 * * 1-5
),但是我想在网站上添加一个答案,以提供常见的cron时间表,ahem, crontab表达式。
我在Airflow上经常使用它来提出DAG的schedule_interval
。
可帮助您以交互方式设计cron时间表的主应用程序位于crontab.guru。
仅在工作日时间表上的示例-https://crontab.guru/every-weekday
更多常见示例(例如,每半小时,每季度等)-https://crontab.guru/examples.html
答案 1 :(得分:5)
'schedule_interval': '0 0 * * 1-5'
从星期一到星期五的每周的00:00运行。
答案 2 :(得分:1)
我也有类似的需求,最终把它放在我的开始之初-它类似于ShortCircuitOperator。
import logging
from airflow.models import SkipMixin, BaseOperator
from airflow.utils.decorators import apply_defaults
class pull_file_decision_operator(BaseOperator, SkipMixin):
template_fields = ('execution_date',)
@apply_defaults
def __init__(self,
day_of_week,
hour_of_day,
execution_date,
**kwargs):
self.day_of_week = day_of_week
self.hour_of_week = hour_of_day
self.execution_date = execution_date
def execute(self, context):
# https://docs.python.org/3/library/datetime.html#datetime.date.weekday
run_dt = self.execution_date
dow = self.day_of_week
hod = self.hour_of_day
if run_dt.weekday() == dow and run_dt.hour == hod:
return True
else:
downstream_tasks = context['task'].get_flat_relatives(upstream=False)
logging.info('Skipping downstream tasks...')
logging.info("Downstream task_ids %s", downstream_tasks)
if downstream_tasks:
self.skip(context['dag_run'],
context['ti'].execution_date,
downstream_tasks)