Airflow 将变量传递到气流中的模板

Airflow 将变量传递到气流中的模板,airflow,Airflow,在“气流”中,我使用不同的运算符和for循环创建分支,我的代码如下所示: for table in ['messages', 'conversations']: Operator1 with operator1.task_id = 'operator1_{}'.format(table) Operator1 does kwargs['ti'].xcom_push(key='file_name', value='y') Operator2 is a BashOperato

在“气流”中,我使用不同的运算符和for循环创建分支,我的代码如下所示:

for table in ['messages', 'conversations']:
    Operator1 with operator1.task_id = 'operator1_{}'.format(table)
    Operator1 does kwargs['ti'].xcom_push(key='file_name', value='y')

    Operator2 is a BashOperator that needs to run:
    bash_command = "echo {{ ti.xcom_pull(task_ids='operator1_{}', key='file_name') }}".format(table)       

    Operator1 >> Operator2
但在UI中,命令的呈现方式如下:

echo { ti.xcom_pull(task_ids='operator1_messages', key='file_name') }
echo { ti.xcom_pull(task_ids='operator1_conversations', key='file_name') }
如何编写bash_命令以正确解释模板

如果我直接写信

 bash_command = "echo {{ ti.xcom_pull(task_ids='operator1_messages', key='file_name') }}"
它可以工作,但我想从for循环创建这个命令


谢谢

这样做是因为bash命令的
.format(table)
部分正在剥离外部
{
}
。您可以通过以下方法解决此问题:

bash_command = "echo {{ ti.xcom_pull(task_ids='operator1_" + table + "', key='file_name') }}"

这是否是最好的方法可能是另一个问题。

非常感谢,它现在起作用了!我还通过bash_command=“echo{{ti.xcom\u pull(task_id='operator1\%(table)s',key='file_name')}}”和在Operator2中设置参数={'table':table}来修复它