Передать переменную в шаблон в Airflow - PullRequest
0 голосов
/ 16 мая 2018

В 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

Но в интерфейсе команды отображаются так:

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 Ответ

0 голосов
/ 16 мая 2018

Это происходит потому, что часть .format(table) вашей команды bash удаляет внешние { и }.Вместо этого вы можете исправить это следующим образом:

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

Возможно, это лучший способ сделать это - другой вопрос.

...