Airflow 如何在气流中格式化宏?

Airflow 如何在气流中格式化宏?,airflow,Airflow,我有以下资料: EXEC_DATE1 = '{{ macros.ds_add(ds, 1) }}' EXEC_DATE2 = '{{ execution_date }}' EXEC_DATE = "{{ next_execution_date.strftime('%Y-%m-%d/%H:%M') }}" 我想创建如下所示的路径变量: path1 = EXEC_DATE1 + '/' + HH:MM (of EXEC_DATE1) path2 = EXEC_DATE2 + '/' + HH

我有以下资料:

EXEC_DATE1 = '{{ macros.ds_add(ds, 1) }}'


EXEC_DATE2 = '{{ execution_date }}'
EXEC_DATE = "{{ next_execution_date.strftime('%Y-%m-%d/%H:%M') }}"
我想创建如下所示的路径变量:

path1 = EXEC_DATE1 + '/' + HH:MM (of EXEC_DATE1)
path2 = EXEC_DATE2 + '/' + HH:MM (of EXEC_DATE2)
最终应该是这样的:

2018-09-16/10:41
我该怎么做

我试过:

EXEC_DATE = '{{ execution_date }}'
EXEC_DATE = EXEC_DATE.strftime('%Y-%m-%d/%H:%M')
但它给出了:

'str' object has no attribute 'strftime'
编辑: 我的代码:


这不管用。不呈现参数。

您需要按如下方式执行:

EXEC_DATE = "{{ execution_date.strftime('%Y-%m-%d/%H:%M') }}"
strftime
应在花括号内使用

如果需要下一个_执行日期,请使用以下命令:

EXEC_DATE1 = '{{ macros.ds_add(ds, 1) }}'


EXEC_DATE2 = '{{ execution_date }}'
EXEC_DATE = "{{ next_execution_date.strftime('%Y-%m-%d/%H:%M') }}"
如果您只想添加一个
timedelta

EXEC_DATE = "{{ (execution_date + macros.timedelta(days=1)).strftime('%Y-%m-%d/%H:%M') }}"
您的代码可以如下所示:

EXEC_DATE = "{{ execution_date.strftime('%Y-%m-%d/%H:%M') }}"
BASH_命令=”“”
python3 script.py{{var.value.task3_variable}{{execution_date.strftime('%H:%M')}}{{execution_date.strftime('%Y-%M-%d')}}file.json
"""
task3_op=bash运算符(
任务id='task3',
bash\u命令=bash\u命令,
dag=dag)

具体地说,问题代码中不起作用的是,您的
参数
没有在其上运行模板(宏扩展),但您的
bash_命令
有。因此,我打赌
bash_命令的渲染模板视图类似于,例如:

python3 script.py 'task3_variable's value' '{{  execution_date.strftime('%H:%M') }}' '{{  execution_date.strftime('%Y-%m-%d') }}' 'file.json'
这并没有得到进一步的扩展,
也很可能对Bash失去了意义,因为实际上您有:

params = { 'EXEC_DATE': "{{  execution_date.strftime('%H:%M') }}",
           'EXEC_TIME': "{{  execution_date.strftime('%Y-%m-%d') }}" }
因此,直接使用您在
bash_命令
params
中设置的模板来删除一级宏扩展,对您来说效果更好

task3_op = BashOperator(
    task_id='task3',
    bash_command="""
python3 script.py '{{ var.value.task3_variable }}' \
'{{execution_date.strftime('%H:%M')}}' '{{execution_date.strftime('%Y-%m-%d')}}' file.json
    """,
    dag=dag)
调试此类问题时,应使用或检查UI任务实例详细信息中的呈现视图

它可能会告诉您假定的宏扩展出了什么问题。
此示例应呈现如下内容:

python3 script.py 'task3_variable's value' \
'12:21' '2018-09-16' file.json
您希望根据日期创建两条路径;尝试:

task3_op= BashOperator(
    task_id='task3',
    bash_command="""
python3 script.py \
  '{{ var.value.task3_variable }}' \
  '{{(execution_date + macros.timedelta(days=1).strftime('%Y-%m-%d/%H:%M')}}' \
  '{{execution_date.strftime('%Y-%m-%d/%H:%M')}}' \
  file.json
    """,
    dag=dag)

气流1.10还添加了
next_execution_date
,这可能比在
execution_date
中添加一天更好,如果您的间隔是每天的话。

它不会为我的Bash操作符渲染