为什么我们需要气流钩?

use*_*993 9 python database airflow

Doc 说:

Hooks 是外部平台和数据库的接口,如 Hive、S3、MySQL、Postgres、HDFS 和 Pig。Hooks 在可能的情况下实现一个公共接口,并充当操作符的构建块。参考

但是我们为什么需要它们?

我想从一个 Postgres 数据库中选择数据,然后存储到另一个。例如,我可以在由 python 操作员运行的 python 脚本中使用 psycopg2 驱动程序,或者气流出于某种原因应该知道我在脚本中到底在做什么,所以,我需要使用 PostgresHook 而不仅仅是 psycopg2 驱动程序?

Jav*_*más 5

你应该只使用 PostresHook。而不是像这样使用 psycopg2:

conn = f'{pass}:{server}@host etc}'
cur = conn.cursor()
cur.execute(query)
data = cur.fetchall()
Run Code Online (Sandbox Code Playgroud)

您只需键入:

postgres = PostgresHook('connection_id')
data = postgres.get_pandas_df(query)
Run Code Online (Sandbox Code Playgroud)

这也可以利用连接加密。

所以使用钩子更干净、更安全、更容易。

  • “更容易”是一个意见和经验的问题。psycopg2 拥有更好的文档、更稳定的 API,并且已经为很多人所熟悉。“更清洁”也是有争议的:您的示例并不等效,因为您省略了气流挂钩的设置。也许你可以详细解释一下为什么钩子更安全? (3认同)

Jam*_*ess 4

虽然可以在脚本中对连接进行硬编码并运行它,但挂钩的强大功能将允许从 UI 内编辑环境变量。

请参阅“借助 Airflow Hooks 自动执行 AWS 任务”,了解有关如何使用 Hook 的更多信息。