Python 3.x 气流2.0.2-Jinja2顶层模板错误

Python 3.x 气流2.0.2-Jinja2顶层模板错误,python-3.x,jinja2,airflow,Python 3.x,Jinja2,Airflow,我看到以下错误发生: 回溯(最近一次调用上次):文件 “/usr/local/lib/python3.8/site packages/aiffort/models/taskinstance.py”, 第1138行,运行中的原始任务 self.\u准备\u和执行\u任务\u以及\u回调(上下文、任务)文件 “/usr/local/lib/python3.8/site packages/aiffort/models/taskinstance.py”, 第1275行,在_prepare_和_execu

我看到以下错误发生:

回溯(最近一次调用上次):文件 “/usr/local/lib/python3.8/site packages/aiffort/models/taskinstance.py”, 第1138行,运行中的原始任务 self.\u准备\u和执行\u任务\u以及\u回调(上下文、任务)文件 “/usr/local/lib/python3.8/site packages/aiffort/models/taskinstance.py”, 第1275行,在_prepare_和_execute_task_中使用_回调 self.render_模板(context=context)文件“/usr/local/lib/python3.8/site packages/afflow/models/taskinstance.py”, 第1779行,在渲染模板中 self.task.render_模板_字段(上下文)文件“/usr/local/lib/python3.8/site packages/afflow/models/baseoperator.py”, 第892行,在“渲染模板”字段中 self.\u do\u render\u template\u字段(self,self.template\u字段,上下文,jinja\u env,set())文件 “/usr/local/lib/python3.8/site packages/afflow/models/baseoperator.py”, 第905行,在_do_render_template_字段中 rendered_content=self.render_模板(内容、上下文、jinja_env、seen_oids)文件 “/usr/local/lib/python3.8/site packages/afflow/models/baseoperator.py”, 第942行,在“渲染”模板中 从字符串(content.render(**context)文件“/usr/local/lib/python3.8/site packages/jinja2/environment.py”行返回jinja_环境 1090,在渲染中 self.environment.handle_exception()文件“/usr/local/lib/python3.8/site packages/jinja2/environment.py”,第行 832,在句柄_异常中 重放(*重写回溯堆栈(source=source))文件“/usr/local/lib/python3.8/site packages/jinja2/_compat.py”,第28行, 重播 通过_回溯(tb)提升值

文件“”,第1行,顶层模板代码 jinja2.exceptions.UndelineError: “目标_表”未定义

尝试在气流中运行此任务时:

TABLE_NAME = 'sales.il_sales'

t4 = SnowflakeOperator(
    task_id='my_test_query.sql',
    sql='sql/my_test_query.sql',
    params={
        'target_table': TABLE_NAME,
    },
    retries=0,
    pool='airflow')

这很奇怪,因为在
sql/my\u test\u query.sql
文件中,target\u表是
'sales.il\u sales'
,如果您使用
{target\u table}
它将无法工作。您需要使用
{{params.target_table}

例如:

从{{params.target_table}中选择*

检查文档中的示例:

您需要发布SQLcode@Elad我认为错误发生在参数中,因为我们有“target_table”,感谢您的响应!这会起作用,但假设我有一个自定义运算符,我如何使其起作用,例如,我尝试将以下内容添加到template_fields/template_ext,但仍然看到相同的错误:类SnowflakeTestOperator(BaseOperator):template_fields=['sql','params','target_table']template_ext=['.sql','target_table']它也会起同样的作用。params是的参数BaseOperator@Elad谢谢你的回答!有没有一种方法我不必将params.target_表添加到查询中,我有很多查询需要更改,所以我很好奇。我尝试将其添加到模板_字段=['sql','params']中,但不起作用。您可以创建用户定义的宏,但仍需要在sql文件中编辑模板。我不确定这有什么问题?在大多数IDE中,您可以通过单击一个按钮来实现这一点。