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") }}',
)
我的目标是 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") }}',
)