Airflow 覆盖气流中的雪花钩

Airflow 覆盖气流中的雪花钩,airflow,Airflow,我有一个问题,关于覆盖钩子的最佳实践是什么 项目(继承)克隆钩子代码(转到github项目,复制钩子,在项目中粘贴一个使用此复制的钩子创建自定义操作符)。我想改变这个方法,使之与机翼的挂钩一起工作。 问题在于公司如何使用凭证。气流挂钩与连接页面一起运行: 但是该公司有一个存储所有凭据的存储库,因此我想像这样覆盖init类: from airflow.contrib.hooks.snowflake_hook import SnowflakeHook class SnowflakeHook(Sno

我有一个问题,关于覆盖钩子的最佳实践是什么

项目(继承)克隆钩子代码(转到github项目,复制钩子,在项目中粘贴一个使用此复制的钩子创建自定义操作符)。我想改变这个方法,使之与机翼的挂钩一起工作。 问题在于公司如何使用凭证。气流挂钩与连接页面一起运行:

但是该公司有一个存储所有凭据的存储库,因此我想像这样覆盖init类:

from airflow.contrib.hooks.snowflake_hook import SnowflakeHook

class SnowflakeHook(SnowflakeHook):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        env = VariableManagement()
        self.user = env.GetVariable('user')
        self.password = env.GetVariable('pass')
这是正确的工作方式吗?我能做得更好吗


谢谢

实现这一点的最佳方法是实现自定义

当然,您可以对钩子进行子类化。但现在,除非覆盖现有操作符,否则不能将其用于现有操作符。对于你想用的每一个这样的钩子,你都必须这样做

相反,您可以使用公司的creds商店作为airflow连接系统的后端

然后,您应该能够避免对您使用的每个钩子进行子类化

最干净的解决方案是更新您的creds存储库以将creds存储在中


但如果这对你来说是不可能的,那么这仍然是非常艰难的。

你可以这样做。不要对类使用相同的名称。还有,为什么您要从contrib而不是提供商导入?我使用的是1.10.12。我不知道为什么pip安装不会出现在提供程序中。