AIRFLOW:在 {{ds}} 的神社模板中使用 .replace() 或 relativedelta()

AIRFLOW: use .replace() or relativedelta() in jinja template for {{ds}}

我的目标是 return 上个月的第一天基于气流宏变量 {{ds}} 并使用它,例如在 HiveOperator.

例如对于 ds = 2020-05-09 我希望 return: 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 

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

我做错了什么?

您可以使用:

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