为什么 ds 和 ds_nodash 宏是 return 昨天的日期?

Why do ds and ds_nodash macros return yesterday's date?

如果我的 Airflow DAG 的 cron 表达式是:30 0 * * *,那么为什么我的 DAG 运行s 显示前一天的执行日期?

我正在使用 Airflow 1.10.10。在 DAG 中,我在数据库上有 PostgresOperators 运行ning SQL。 SQL 包含日期列的过滤器,我使用 {{ ds_nodash }} 宏进行过滤。但是,ds_nodash 宏解析到昨天!

这是 dag 运行 日期的网络服务器视图:

我的期望是执行日期 date 应该与基于 cron 间隔表达式的开始日期相同或非常接近。我的假设不正确吗?如果是,为什么?

如您所述,run_id 是使用 execution_date 创建的。 您的 SQL 查询可能需要:

WHERE date_col BETWEEN {{ ds_nodash }} AND {{ next_ds_nodash }}

这是因为在 ETL 中,您指定了要查询的 window,但此 window 只能在间隔结束时访问。因此导致 2021-02-21 的 运行 实际上只能在 2021-02-22.

上执行

这个 可能会提供有关计划的更多信息。

由于这让很多用户感到困惑,因此在开发邮件列表中有一个 discussion 来解决这个问题。所以这将在未来的 Airflow 版本中改变。