首页 > 解决方案 > 如何在 Airflow 中扩展模板上下文?

问题描述

如何向为模板(即Macro)提供的上下文添加新键?我查看了解决方案的源代码,但找不到自己。

start_date在命名模板参数(和end_date)时,我必须适应外部约束。user_defined_macrosuser_defined_filters插件宏不适用,因为它们将提供函数,而不是要替换的评估值(即,必须在模板中编写而不是){{start_date()}}。 我曾尝试使用Jinja 的装饰器,但无法修改上下文。{{start_date}}
contextfunction

class的get_template_context()方法TaskInstance返回models/taskinstance.py中的字典,它成为模板的上下文。看来,除了修补 Airflow 的来源之外,没有办法通过其他方式扩展 (update()) 这本字典,我想避免这种方式。

标签: pythonairflowdirected-acyclic-graphs

解决方案


您可以对 sql 文件使用开箱即用的模板。例如,您可以使用:

select * from table1 where created between "{{params.start_date}}" and "{{params.end_date}}"

并在任务定义中给出参数:

task = PostgresOperator(task_id='task_name',
                               sql="sql/delete_and_copy.sql",
                               postgres_conn_id="postgres_connection",
                               database="dev",
                               params={
                                          'start_date': start_date,
                                          'end_date': end_date,
                                      },
                                      )

start_date 和 end_date 可以由 Python 运算符计算。 https://airflow.apache.org/docs/apache-airflow/stable/tutorial.html#templating-with-jinja


推荐阅读