【问题标题】:AIRFLOW: use .replace() or relativedelta() in jinja template for {{ds}}AIRFLOW:在 jinja 模板中为 {{ds}} 使用 .replace() 或 relativedelta()
【发布时间】:2021-07-09 08:53:17
【问题描述】:

我的目标是根据气流宏变量 {{ds}} 返回上个月的第一天并使用它,例如在 HiveOperator 中。

例如对于 ds = 2020-05-09,我预计返回:2020-04-01

我找到并尝试过的解决方案是:

SET hivevar:LAST_MONTH='{{ (ds.replace(day=1) - macros.timedelta(days=1)).replace(day=1) }}';
SET hivevar:LAST_MONTH='{{ ds + macros.dateutil.relativedelta.relativedelta(months=-1, day=1) }}'

但两者都导致错误:

Error rendering template: replace() takes no keyword arguments 

Error rendering template: must be str, not relativedelta 

并且在渲染时没有显示任何日期。

我做错了什么?

【问题讨论】:

  • 你能分享一下预期输出的例子吗?你的意思是 2020-05-09 你想得到 2020-05-01 吗?
  • 2020-05-09 我预计会收到:2020-04-01

标签: python macros airflow


【解决方案1】:

你可以使用:

{{ (execution_date + macros.dateutil.relativedelta.relativedelta(months=-1, day=1)).strftime("%Y-%m-%d") }}

例子:

from airflow.operators.bash_operator import BashOperator
default_args = {
    'owner': 'airflow',
    'start_date': datetime(2020, 4, 1),

}
with DAG(dag_id='stackoverflow',
         default_args=default_args,
         schedule_interval=None,
         catchup=False
         ) as dag:
    run_this = BashOperator(
        task_id='example',
        bash_command='echo ds is {{ ds }} modified ds is {{ (execution_date + macros.dateutil.relativedelta.relativedelta(months=-1, day=1)).strftime("%Y-%m-%d") }}',
    )

【讨论】:

  • ds 和 execution_date 变量有什么区别?因为除了那个 var anme 我的例子是相同的 anbd 它不起作用:{ ds + macros.dateutil.relativedelta.relativedelta(months=-1, day=1) }}
  • ds 为字符串,execution_date 为 Pendulum
  • 如何在字符串上使用它?我将日期作为运行时参数作为字符串传递
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
相关资源
最近更新 更多