如何在气流中通过XComs将参数从PythonOperator传递到HttpSensor?
我想发送一个HTTP请求,其参数取决于依赖Python可调用函数的结果。我正试图为此使用XCOM。简化示例:如何在气流中通过XComs将参数从PythonOperator传递到HttpSensor?,python,airflow,apache-airflow,Python,Airflow,Apache Airflow,我想发送一个HTTP请求,其参数取决于依赖Python可调用函数的结果。我正试图为此使用XCOM。简化示例: def get_index(): return 0 get_index = PythonOperator( task_id='get_index', python_callable=get_index, dag=dag) http_request = HttpSensor( task_id='send_http_request', http_conn_id=H
def get_index():
return 0
get_index = PythonOperator(
task_id='get_index',
python_callable=get_index,
dag=dag)
http_request = HttpSensor(
task_id='send_http_request',
http_conn_id=HTTP_HOST,
endpoint=ENDPOINT,
params={
"index": "{{ ti.xcom_pull('get_index') }}"
},
dag=dag)
get_index >> http_request
不幸的是,在检查HTTP请求的选项后,我发现宏没有正确计算,而是发送了
{{ti.xcom\u pull('get\u index')}
。可能出了什么问题?我是否应该使用HttpOperator
而不是HttpSensor
?我认为参数已被弃用,并且未被气流中的jinja模板引擎扫描。尝试使用request_params而不是params(这是一个字符串键/值对字典)。如前所述,params
中的jinja模板当前未被评估。我通过切换到SimpleHttpOperatr
s并将模板放在data
字段中解决了问题。这并不能回答问题。一旦你有足够的钱,你将能够;相反@SirRufo实际上它回答了这个问题。在所描述的传感器中,它使用jinja表达式“{ti.xcom_pull('get_index')}”,气流永远不会将其作为jinja模板读取,因此不会被xcom的值替换。但是,如果params被重命名为request_params,则解释它并用xcom的值替换“{ti.xcom_pull('get_index')}}”。在我的机器上测试。我想并尝试的答案更像是一个建议,可以完美地作为一个评论,但不是一个合格的答案。