为啥我应该使用 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 interactionpython 库的使用在契约到钩子上要方便得多。它实现了人们需要的所有美好事物。钩子或多或少只是纯粹的 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 运行更新查询
为啥我应该使用 LoadBalancerProbe 而不是订阅 RoleEnvironment.StatusCheck 事件?
为啥我应该使用 CString 的 GetBuffer 成员而不是 SetAt?