我啥时候应该在 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 运算符上使用特定的气流运算符?的主要内容,如果未能解决你的问题,请参考以下文章

Quorum Vs Versioning,我啥时候应该使用啥?

我啥时候应该在课堂上使用“this”?

我啥时候应该在 NavLink 上使用 Link?

我啥时候应该在 django 模型字段上使用 null=False

我啥时候应该考虑使用 ORM 框架?

我啥时候应该在“class”上使用“className”,反之亦然?