气流:在{ds}的jinja模板中使用.replace()或relativedelta()

2024-06-16 11:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是基于airflow宏变量{{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 

渲染时没有显示任何日期

我做错了什么


Tags: 目标dstemplateerrorreplacemacrosairflowlast
1条回答
网友
1楼 · 发布于 2024-06-16 11:32:36

您可以使用:

{{ (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") }}',
    )

enter image description here

相关问题 更多 >