为啥我应该使用 Airflow Hook 而不是 Python SDK for DataStore?

Posted

技术标签:

【中文标题】为啥我应该使用 Airflow Hook 而不是 Python SDK for DataStore?【英文标题】:Why should I use the Airflow Hook instead the Python SDK for DataStore?为什么我应该使用 Airflow Hook 而不是 Python SDK for DataStore? 【发布时间】:2021-06-25 23:09:08 【问题描述】:

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

使用谷歌python client library 使用Airflow Hook for DataStore interaction

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

但是,我想知道使用钩子而不是客户端库是否有一些优势。

【问题讨论】:

【参考方案1】:

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

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

更新后的版本可能包含旧版本的 contrib hook 中缺少的功能。

Hooks 的想法是包装 python 库,从而为您省去很多麻烦。例如:当您使用钩子时,您不需要处理设置连接。钩子会为你做到这一点。

您始终可以直接使用 python 库,但我认为这是一种不好的做法。在不同的用例中使用同一个库是很常见的 - Hook 可以与多个运算符一起使用,从而为您节省大量代码重复。

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

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
          

【讨论】:

感谢您的回答。我一直使用旧版本,因为由于某些原因我不得不坚持使用这个版本一段时间。我明白了有关连接设置的要点,尽管它也很容易与客户端库一起使用。可以说出更多的论据,为什么这是不好的做法,有什么缺点。

以上是关于为啥我应该使用 Airflow Hook 而不是 Python SDK for DataStore?的主要内容,如果未能解决你的问题,请参考以下文章

Airflow BigQuery Hook - 通过 run_query 运行更新查询

为啥我应该使用 Any 方法而不是 Count? [复制]

为啥我应该使用 LoadBalancerProbe 而不是订阅 RoleEnvironment.StatusCheck 事件?

为啥我应该使用 CString 的 GetBuffer 成员而不是 SetAt?

Android:何时/为啥我应该使用 FrameLayout 而不是 Fragment?

为啥我应该使用 char 而不是 varchar? [复制]