Airflow 气流:将{params.hotel_ids}作为参数传递给PostgresOperator

Airflow 气流:将{params.hotel_ids}作为参数传递给PostgresOperator,airflow,airflow-scheduler,airflow-operator,Airflow,Airflow Scheduler,Airflow Operator,我们可以在postgress参数中传递数组列表吗 我在尝试类似的东西 Select hotel_name from hoteldetails where id in ({{ params.hotel_ids }}); 在“s3”到“\u redshift.sql”中 下面是我的接线员: s3_to_redshift = PostgresOperator( task_id='s3_to_redshift', postgres_conn_id='redshift', sql

我们可以在postgress参数中传递数组列表吗

我在尝试类似的东西

Select hotel_name from hoteldetails where id in ({{ params.hotel_ids }});
在“
s3”到“\u redshift.sql
”中

下面是我的接线员:

s3_to_redshift = PostgresOperator(
    task_id='s3_to_redshift',
    postgres_conn_id='redshift',
    sql='s3_to_redshift.sql',
    params={'hotel_ids': [1,2,3]},
    dag=dag
)

可以,但您必须担心参数将如何渲染。在本例中,您将传递数组并直接在SQL语句中呈现它。这将在SQL语句中打印
[1,2,3]
,这当然不是有效的SQL语句

气流使用Jinja渲染模板。为了获得正确的SQL语句,可以在Jinja中使用来呈现参数。Airflow还支持在Jinja中添加您自己的功能。这意味着您需要创建一个。例如,可以添加以下宏:

def render_list_sql(列表):
返回“,”。加入(列表)
如果将其作为插件正确导入,则sql模板将转换为以下内容:

在({{macros.render_list_sql(params.hotel_ids)})中从hoteldetails中选择hotel_name,其中id为;

此“宏.呈现列表\u sql”来自何处?似乎找不到有关它的更多信息,无法仅渲染字符串。@thepillow它是一个自定义jinja宏。Airflow允许您使用Airflow插件系统对其进行扩展,该系统允许您添加自定义宏,如上文所述。@Blokje5您能在这里帮助我解决类似问题吗:您能解决您的问题吗?如果是,请更新您的正确回答?谢谢