气流-参数内的Jinja模板(postgresoperator)

时间:2018-12-11 17:39:24

标签: python sql airflow

我在Airflow DAG中使用了许多Postgres运算符(使用for循环进行构建),我想知道是否可以将JINJA模板传递给参数给我的运算符,例如:

params = {'max_field': '{{ ti.xcom_pull(task_ids="get_max_field_' + table + '", key="max_field") }}'} 

所以在.sql文件中,我只需要有一个看起来像

的查询
SELECT .... FROM .... WHERE ... > '{{ params.max_field }}'

我的问题是我现在有很多查询,直接可以做

SELECT .... FROM .... WHERE ... > '{{ ti.xcom_pull(task_ids="get_max_field_table1'", key="max_field") }}' 

存在很多错误风险(例如,当人们复制粘贴时,写成table2而不是table1)。

我尝试将params放在template_fields =('sql','parameters','params')中,但是没有用,它使用'{{ti.xcom_pull(task_ids =“ get_max_field_table1'”“,key =“ max_field”)}}'代替值。

我还尝试使用参数代替参数,然后执行以下操作:

SELECT .... FROM .... WHERE ... > '%(max_field)s'

但是如果查询中有%,我的查询就会出现问题,例如:

SELECT .... FROM .... WHERE ... > '%(max_field)s' and text like '%hello%'

1 个答案:

答案 0 :(得分:0)

params不支持Jinja模板。