Airflow 中的 Jinja 模板总是将值更改为字符串
Jinja template in Airflow always change value to String
我在 Airflow 中有一个自定义的运算符 my_previous_job
,returns 一个 Python 列表。
在我的 DAG 定义中,我使用 jinja 模板引用它:
t_my_job = MyOperator(
data=json.dumps({
"jobId": f"{{{{ ti.xcom_pull(task_ids='my_previous_job', "f"key='return_value')}}}}",
})
)
然而,f"{{{{ (ti.xcom_pull(task_ids='my_previous_job', "f"key='return_value')}}}})"
returns 的值不是一个列表,而是一个包含列表的字符串。即
而不是:
['a','b','c']
它returns一个字符串:
"['a','b','c']"
我该怎么做才能获得由 my_previous_job
而不是字符串生成的列表?
对于 Airflow < 2.1.0:呈现模板化字段始终为字符串。
对于 Airflow >= 2.1.0:
支持将字段渲染为原生 Python 对象。
您需要在 DAG 对象中设置 render_template_as_native_obj=True
。
您可以在 docs.
中阅读更多相关信息
我在 Airflow 中有一个自定义的运算符 my_previous_job
,returns 一个 Python 列表。
在我的 DAG 定义中,我使用 jinja 模板引用它:
t_my_job = MyOperator(
data=json.dumps({
"jobId": f"{{{{ ti.xcom_pull(task_ids='my_previous_job', "f"key='return_value')}}}}",
})
)
然而,f"{{{{ (ti.xcom_pull(task_ids='my_previous_job', "f"key='return_value')}}}})"
returns 的值不是一个列表,而是一个包含列表的字符串。即
而不是:
['a','b','c']
它returns一个字符串:
"['a','b','c']"
我该怎么做才能获得由 my_previous_job
而不是字符串生成的列表?
对于 Airflow < 2.1.0:呈现模板化字段始终为字符串。
对于 Airflow >= 2.1.0:
支持将字段渲染为原生 Python 对象。
您需要在 DAG 对象中设置 render_template_as_native_obj=True
。
您可以在 docs.