我啥时候应该在 python 运算符上使用特定的气流运算符?

Posted

技术标签:

【中文标题】我啥时候应该在 python 运算符上使用特定的气流运算符?【英文标题】:When should I use a specific airflow operator over a python operator?我什么时候应该在 python 运算符上使用特定的气流运算符? 【发布时间】:2022-01-19 01:31:15 【问题描述】:

例如,如果我有一个 python 函数,它使用 sqlalchemy 创建一个 my_sql 引擎并将数据提取到一个表中,我只需创建一个 python 运算符并将其连接到该可调用对象。

我宁愿使用 mysqlOperator 而不是将进程包含在 PythonOperator 中的原因是什么?有哪些优点?缺点?

【问题讨论】:

【参考方案1】:

MySqlOperator 的设计目的是让您只需提供 SQL:

drop_table_mysql_task = MySqlOperator(
    task_id='create_table_mysql', sql="""DROP TABLE table_name;""", dag=dag
)

接线员已经为您处理好了一切。你不需要创建 mysql 引擎,甚至不需要知道 sqlalchemy 是什么。 PythonOperator 用于执行任意代码,这对于创建自定义运算符没有意义。

是的 - 如果您愿意,您可以使用 PythonOperator 做任何事情。

根据您的描述,您似乎更喜欢编写脚本并使用 Airflow 安排它们。让 Airflow 成为类似 cron-job 的系统 - 这是一件小事,因为这意味着您没有利用该工具的强大功能。

【讨论】:

知道了,这就是我使用 Airflow 的方式。所以本质上,你会说使用 PythonOperator 是一种偏好(在这种情况下),但是这样做,我并没有充分利用 Airflow 的潜力?除了懒惰地使用该工具之外,没有任何特别的利弊? PythonOperators 很棒,但例如许多(如果不是全部)逻辑应该在挂钩中。我建议您阅读有关如何在 Airflow 上进行开发的信息。不要像编写脚本那样编写代码并尝试安排它...以 Airflow 方式编写代码。 所有的逻辑......意味着某些事情,如 SQL 摄取、将文件加载到 S3 等?

以上是关于我啥时候应该在 python 运算符上使用特定的气流运算符?的主要内容,如果未能解决你的问题,请参考以下文章