我应该将什么start_date用于手动触发的DAG?

时间:2018-06-07 15:15:12

标签: airflow airflow-scheduler

SELECT * FROM table1 t1 WHERE t1.b_c IN ('A', 'B') AND t1.d_id IN ('2', '3') AND ( (t1.a_d >= '1-May-2018'AND t1.a_d <= '15-May-2018') OR (t1.a_r >= '1-May-2018' AND t1.a_r <= '15-May-2018')) AND ( t1.a_m = 'AC' AND t1.s = 'SW' AND t1.c_m IN ('DM', 'SW') AND t1.d_m IN ('DM', 'SW') OR ((t1.a_m = 'NO' AND t1.s = 'SW') AND ( (t1.d_m = 'DM' AND t1.c_m = 'DM') OR (t1.d_m = 'SW' AND t1.c_m = 'DM') OR NOT (t1.d_m = 'DM' AND t1.c_m = 'SW') OR (t1.d_m = 'SW' AND t1.c_m = 'SW')))) AND ( (t1.a_m,t1.s,t1.d_m,t1.c_m,t1.d_s) NOT IN ( ('NO', 'SW', 'SW', 'DM', 'X001'), ('NO', 'SW', 'SW', 'DM', 'XXXX'))) -- added this: AND NOT (t1.dept_id IN ('20', '35') AND t1.a_m IN ('AC', 'NO') AND t1.s = 'SW' AND t1.c_m = 'DM' AND t1.d_m IN ('DM', 'SW') AND ((t1.o_b = 'X001' AND t1.s_s = 'X001' ) OR (t1.o_b = 'XXXX' AND t1.s_s = 'XXXX')) AND REGEXP_LIKE (t1.r_no, '^(20PS|35RE)'))) ; 的{​​{3}}许多airflow example dags设置了动态开始日期,如airflow.utils.dates.days_ago(2)datetime.utcnow()。但是,docs建议针对动态开始日期:

  

我们建议不要将动态值用作start_date,尤其是datetime.now(),因为它可能非常混乱。一旦周期结束,任务就会被触发,理论上@hourly DAG永远不会达到一小时之后,因为now()会一直移动。

开始日期与手动触发的dags无关吗?这里的最佳做法是什么?

3 个答案:

答案 0 :(得分:4)

我总是尝试将手动触发的DAGS的开始日期设置为我第一次运行它的那一天,以便我知道DAG何时会在未来首次运行以供参考。

答案 1 :(得分:0)

如果您有schedule_interval=None我相信start_date无关紧要,因为气流不会尝试执行任何回填。只要把它设置成任何东西,即使它是动态的也不应该引起麻烦。

答案 2 :(得分:0)

我最终只是将start_date设置为1月1日(过去很远)到1970年,以使Airflow从不抱怨执行日期早于开始日期。