python - 如何在 Airflow 中扩展模板上下文?
问题描述
如何向为模板(即Macro)提供的上下文添加新键?我查看了解决方案的源代码,但找不到自己。
start_date
在命名模板参数(和end_date
)时,我必须适应外部约束。user_defined_macros
和user_defined_filters
和插件宏不适用,因为它们将提供函数,而不是要替换的评估值(即,必须在模板中编写而不是){{start_date()}}
。
我曾尝试使用Jinja 的装饰器,但无法修改上下文。{{start_date}}
contextfunction
class的get_template_context()
方法TaskInstance
返回models/taskinstance.py中的字典,它成为模板的上下文。看来,除了修补 Airflow 的来源之外,没有办法通过其他方式扩展 (update()) 这本字典,我想避免这种方式。
解决方案
您可以对 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
推荐阅读
- express - 为什么 Apollo Server 不是 Express 的中间件,而是接受 Express 作为中间件的服务器?
- javascript - 如何使用 vuejs 2 转换数组中的数据?
- arrays - 返回数组索引第一个值的函数不缺少 SAS
- html - 使用 Flex 在父级中居中,而不考虑兄弟级
- javascript - 计算机属性“有时”不刷新 - 强制重新加载? - Vue JS
- mongodb - 为什么单调递增的分片键会导致插入被路由到以 maxkey 为上限的块?
- linux - 如何更改远程构建机器 Visual Studio 2017
- json - 使用 Twig 或 Grunt 从 JSON 数组创建导航
- javascript - HTML - 单击按钮获取表格单元格值
- gitlab - 如何从 gitlab CI 管道中推送到仓库?