【问题标题】: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 版本中发生变化。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多