气流如何解析和存储schedule_interval

时间:2018-07-24 21:10:36

标签: airflow

我正在开发一项功能,该功能需要Airflow作业的schedule_intervals。我一直没有尝试自己编写代码来解析DAG文件中的cron表达式,而是尝试在Airflow元数据数据库中找到已解析的schedule_interval值,但无济于事。

有人可以给我一个指导,以了解Airflow如何解析schedule_interval表达式(例如,位于https://github.com/apache/incubator-airflow的文件),以及解析后的值存储在哪里(如果存储了值)?

编辑:

  1. 上面的schedule_interval表达式是DAG参数schedule_interval,如下所示:
      

    dag = DAG(      'tutorial',default_args = default_args,schedule_interval ='@ daily')

根据this documentation page,schedule_interval可以是cron表达式,datetime.timedelta对象或“ @daily”之类的“预设”之一。因为schedule_interval可以采用多种形式,所以如果Airflow已经解析并存储了这些值,我不想重新发明轮子并编写代码来解析schedule_interval参数。

  1. 我正在构建一个系统,以通过查询Airflow元数据数据库来定期检查所有Airflow作业并总结其状态。尽管不是绝对必要的,但了解schedule_interval还是很有用的,因为它可以显示诸如每个Airflow作业的信息,在过去24小时内预计要进行多少次dag运行以及何时进行下一次dag运行。

2 个答案:

答案 0 :(得分:0)

我无法找到Airflow在哪里存储了schedule_interval的解析值,但是我确实找到了用于解析schedule_interval表达式的代码。它位于utils模块(https://github.com/apache/incubator-airflow/blob/master/airflow/utils/dates.py)中。

答案 1 :(得分:0)

schedule_interval值不存储在进程本身之外的任何位置。气流通过或多或少地检查NOW() >= (MAX(execution_date, start_date)) + schedule_interval

来确定何时创建新运行

如果需要,您可以使用execution_dateairflow.models.DAG.following_schedule方法以编程方式计算Airflow的airflow.models.DAG.previous_schedule值。

注意:Airflow使用croniter程序包来计算外部cron值。