在 Airflow 中,如果我创建一个自定义运算符类,并在 dag 中使用它,它实际上必须返回任何内容吗?
举几个例子,假设我创建了传感器运算符(继承自 base_sensor_operator
),它每 5 分钟检查一次某处是否存在文件。与 check_for_wildcard_key()
及其返回 True 或 False 的方式类似。我创建的任何方法实际上都必须有一个包含此 True/False 值的 return 语句才能正常运行吗?调度程序是否知道在没有返回语句的情况下重试此任务?
另一个示例是,如果我创建一个自定义运算符(非传感器),该运算符在不常见的数据库中执行 SQL 代码,那么我需要创建自己的运算符来连接到该数据库。假设我在自定义运算符类中使用 execute_SQL()
方法。我不需要有返回值,对吗?由于 dag 文件内的运算符对象本身只会“运行”,因此我不需要返回任何内容?
我知道有时我们会使用 xcom_push
和 xcom_pull
,因此如果我们需要在任务之间发送/接收结果,那么最好有返回值。即使某些东西可能不会被使用,也将其归还是良好的做法吗?自定义运算符类可以在没有 return 语句的情况下工作吗?
最佳答案
不,Operator 类不需要返回任何内容。实际上操作符的主要功能是execute方法,并且大多数操作符不返回任何内容。示例:BranchPythonOperator
、TriggerDagRunOperator
、DatabricksRunNowOperator
等。它们只是完成工作。
另一方面,传感器的 poke
方法需要返回 True
或 False
,因为 execute
BaseSensorOperator
的方法调用 self.poke
方法,并根据返回值采取操作。
关于python - Airflow 运算符(operator)是否需要返回任何内容才能正常运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62791606/