为什么我应该使用Airflow Hook而不是用于DataStore的Python SDK



我的一些Airflow作业将使用Google DataStore。从Airflow访问DataStore至少有两种明显的可能性:

  • 使用谷歌python客户端库
  • 使用气流挂钩进行数据存储交互

python库的使用在与钩子的契约中要方便得多。它实现了人们需要的所有美好事物。钩子或多或少只是纯粹的API包装器。

然而,我想知道使用钩子而不是客户端库是否有一些好处。

首先让我指出,您引用的是旧版本的Hook。更新的版本可以在此处的提供程序包中找到。有关如何安装的说明,请参阅此答案。然后您可以将钩子导入为:

from airflow.providers.google.cloud.hooks.datastore import DatastoreHook

更新后的版本可能具有旧版本的contrib钩子中缺少的功能。

Hooks的想法是包装python库,这样可以省去很多麻烦。例如:当你使用钩子时,你不需要处理连接的设置。钩子为你做那件事。

您总是可以直接使用python库,但是我认为这是一种糟糕的做法。对于不同的用例使用同一个库是非常常见的——Hook可以与多个运算符一起使用,从而节省了大量的代码重复。

如果钩子中不存在python库中的相关函数,您可以始终创建一个自定义钩子-继承上游(开源(钩子并使用它:

from airflow.providers.google.cloud.hooks.datastore import DatastoreHook
Class MyDatastoreHook(DatastoreHook)
def missing_method(self):
#wrap a function from the python lib
conn = self.get_conn()
function code

最新更新