在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 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_command让Airflow正确解释模板?
如果我直接写
bash_command = "echo {{ ti.xcom_pull(task_ids='operator1_messages', key='file_name') }}"
它工作但我想从for循环创建此命令 .
谢谢!
1 回答
这样做是因为你的bash命令的
.format(table)
部分正在剥离外部{
和}
. 您可以通过以下方式解决此问题:这是否是最好的方法可能是另一个问题 .