Airflow PostgresOperator传入SQL文件路径变量遇语法错误求助
解决PostgresOperator传入SQL文件路径被识别为SQL语句的问题
问题原因
PostgresOperator的sql参数直接传入字符串路径时,会被当作SQL语句执行而非文件路径,导致语法错误。
解决方案
使用Jinja模板的{% include %}标签加载SQL文件内容,让Airflow先解析模板读取文件中的SQL代码,再执行查询。
代码示例
import os from airflow.providers.postgres.operators.postgres import PostgresOperator # 拼接得到SQL文件的绝对路径 sql_file = os.path.join(os.path.dirname(__file__), task_config['sql_file']) # 在sql参数中用Jinja include语法加载文件 sql_execution = PostgresOperator( task_id='sql_query', postgres_conn_id=task_config['postgres_conn'], sql=f"{{% include '{sql_file}' %}}" )
说明
os.path.join(os.path.dirname(__file__), ...)确保获取到SQL文件的绝对路径,避免相对路径找不到文件的问题。f"{{% include '{sql_file}' %}}"生成Jinja模板标签,Airflow会自动解析该标签,读取对应路径下的SQL文件内容作为执行语句。- PostgresOperator默认支持
.sql后缀的模板文件,无需额外配置template_ext参数。
内容的提问来源于stack exchange,提问作者Hazhir
相关产品推荐
相关产品推荐

