首页 文章

将变量传递给Airflow中的模板

提问于
浏览
0

在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 回答

  • 1

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

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

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

相关问题