Airflow 气流2.0.2-雪花钩罐';t读取位于目录中的查询

Airflow 气流2.0.2-雪花钩罐';t读取位于目录中的查询,airflow,snowflake-cloud-data-platform,Airflow,Snowflake Cloud Data Platform,我们正在迁移到airflow 2.0,我注意到以下错误,SnowflakeHook似乎无法读取位于“sql”目录中的查询,这在airflow 1.x中运行良好: snowflake.connector.errors.ProgrammingError:001003(42000): 019c5ac7-0602-31b5-0000-01b526e4fa46:SQL编译错误:语法 位置0处的错误行1意外的“sql” 在处理上述异常期间,发生了另一个异常: common.snowflake.excepti

我们正在迁移到airflow 2.0,我注意到以下错误,SnowflakeHook似乎无法读取位于“sql”目录中的查询,这在airflow 1.x中运行良好:

snowflake.connector.errors.ProgrammingError:001003(42000): 019c5ac7-0602-31b5-0000-01b526e4fa46:SQL编译错误:语法 位置0处的错误行1意外的“sql”

在处理上述异常期间,发生了另一个异常: common.snowflake.exceptions.SQLCompilationSnowflakeException:001003 (42000):019c5ac7-0602-31b5-0000-01b526e4fa46:SQL编译错误: 位置0处的语法错误行1意外的“sql”。发生错误 处理查询时(019c5ac7-0602-31b5-0000-01b526e4fa46): sql/my_query.sql

下面是我们创建的类:

class SnowQueryOperator(BaseOperator):
    template_fields = ['sql']

    @apply_defaults
    def __init__(self,
                 sql,
                 params=None,
                 warehouse=Variable.get('default_snowflake_warehouse'),
                 *args,
                 **kwargs):
        super().__init__(*args, **kwargs)
        self.sql = sql
        self.params = params
        self.warehouse = warehouse

    def execute(self, context):
        sf_hook = SnowflakeHook(warehouse=self.warehouse)
        sf_hook.execute_query(self.sql)
我们就是这样使用它的:

t4 = SnowQueryOperator(
    task_id='running_snowflake_query',
    sql='sql/my_query.sql',
    retries=0,
    pool='airflow')

我认为这个代码在Airflow 1.10上不起作用 您缺少允许您读取
.sql
文件的
模板

class SnowQueryOperator(BaseOperator):
    template_fields = ('sql')
    template_ext = ('.sql',)
我不清楚你为什么自己实现这个操作符。气流具有一定的流动性


您可以使用
pip安装apache airflow providers snowflake
安装它,然后从airflow.providers.snowflake.operators.snowflake import snowflake operator以
的身份导入该操作符。谢谢您的回复!不久前有人创建了这个类,但是如果我们可以使用内置的SnowflakeOperator,我会把它提出来,这也行得通!