我在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%'
答案 0 :(得分:0)
params
不支持Jinja模板。