【问题标题】:Why do ds and ds_nodash macros return yesterday's date?为什么 ds 和 ds_nodash 宏返回昨天的日期?
【发布时间】:2021-02-23 18:12:12
【问题描述】:
如果我的 Airflow DAG 的 cron 表达式是:30 0 * * *,那么为什么我的 DAG 运行会显示前一天的执行日期?
我使用的是 Airflow 1.10.10。在 DAG 中,我有 PostgresOperator 在数据库上运行 SQL。 SQL 包含日期列上的过滤器,我正在使用{{ ds_nodash }} 宏进行过滤。但是,ds_nodash 宏解析为昨天!
这是 dag 运行日期的网络服务器视图:
- (我假设
Run Id (scheduled__2021-02-21T00:30:00+00:00) 中的日期是基于我上面描述的行为的 DAG 运行的执行日期。)
我的期望是执行日期日期应该与基于 cron 间隔表达式的开始日期相同或非常接近。我的假设不正确吗?如果有,为什么?
【问题讨论】:
标签:
airflow
airflow-scheduler
【解决方案1】:
如您所述,run_id 是使用execution_date 创建的。
您的 SQL 查询可能需要:
WHERE date_col BETWEEN {{ ds_nodash }} AND {{ next_ds_nodash }}
这是因为在 ETL 中,您指定了要查询的窗口,但该窗口仅在间隔结束时才可访问。从而导致2021-02-21的运行实际上只能在2021-02-22上执行。
这个answer 可能会提供有关日程安排的更多信息。
由于这对许多用户来说非常令人困惑,因此开发邮件列表中的discussion 可以解决此问题。因此,这将在未来的 Airflow 版本中发生变化。