为什么 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 运行 日期的网络服务器视图:
- (我假设
Run Id
(scheduled__2021-02-21T00:30:00+00:00
) 中的日期是基于我上面描述的行为的 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 版本中改变。
如果我的 Airflow DAG 的 cron 表达式是:30 0 * * *
,那么为什么我的 DAG 运行s 显示前一天的执行日期?
我正在使用 Airflow 1.10.10。在 DAG 中,我在数据库上有 PostgresOperators 运行ning SQL。 SQL 包含日期列的过滤器,我使用 {{ ds_nodash }}
宏进行过滤。但是,ds_nodash
宏解析到昨天!
这是 dag 运行 日期的网络服务器视图:
- (我假设
Run Id
(scheduled__2021-02-21T00:30:00+00:00
) 中的日期是基于我上面描述的行为的 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 版本中改变。