气流:从PostgresOperator中的模板化SQL访问ti.xcom_pull()

时间:2019-04-25 14:18:23

标签: python airflow

我有一个任务是从PostgresOperator实例化的,就像这样:

sql = "select * from {{ ti.xcom_pull(key='foo') }};"
task = PostgresOperator(sql=sql)

dag无法加载,提示“ jinja2.exceptions.UndefinedError:'ti'未定义。

当我用task_instance替换'ti'时,我得到相同的错误。任何帮助将不胜感激!

奇怪的是,如果我将ti.xcom_pull(...)替换为ti,它会毫无保留地呈现,并返回<TaskInstance: foo.bar 2019-04-25T14:27:06.822835+00:00 [None]>

1 个答案:

答案 0 :(得分:1)

我用{{task_instance.xcom_pull(task_ids='taskidwherexcomisset', key='foo').encode('utf-8')}}进行了测试,但是我确信{{ ti.xcom_pull(key='foo') }}也可以使用。

尝试:

sql = 'select * from ' + "{{ti.xcom_pull(key='foo').encode('utf-8')}}" + ';',

仅显示示例行的示例行:

[2019-04-25 15:39:24,715] {base_task_runner.py:98} INFO - Subtask: [2019-04-25 15:39:24,714] {postgres_operator.py:52} INFO - Executing: select * from 2019/04/24/;