气流-如何将一个操作员的输出数据作为另一项任务的输入传递

时间:2019-12-30 19:16:26

标签: airflow

我有一个http端点列表,每个端点都自己执行任务。我们正在尝试编写一个应用程序,该应用程序将通过按一定顺序调用这些端点来进行编排。在此解决方案中,我们还必须处理一个http终结点的输出并为下一个http enpoint生成输入。同样,可以根据触发器同时调用同一工作流程。

我到目前为止所做的, 1.定义了一个从HttpOperator派生的新运算符,并引入了将http端点的输出写入文件的功能。 2.编写了python运算符,可以根据必要的逻辑传输输出。

由于我可以同时执行同一工作流程的多个实例,因此无法对输出文件名进行硬编码。有没有一种方法可以使我写的http运算符写入一些唯一的文件名,并且下一个任务应该可以使用相同的文件名,以便它可以读取和处理输出。

1 个答案:

答案 0 :(得分:1)

Airflow确实具有用于操作员交叉通信的功能,称为XCom

XCom可以“推”(发送)或“拉”(接收)。当任务推送XCom时,它将使其通常可用于其他任务。任务可以随时通过调用xcom_push()方法来推送XCom。

任务调用xcom_pull()检索XCom,还可以选择根据诸如密钥,源task_id和源dag_id之类的条件应用过滤器。

要推送到XCOM使用

ti.xcom_push(key=<variable name>, value=<variable value>)

要提取XCOM对象,请使用

myxcom_val = ti.xcom_pull(key=<variable name>, task_ids='<task to pull from>')

使用bash运算符,您只需设置xcom_push = True并将stdout中的最后一行设置为xcom对象。

只需从气流UI打开测试执行并单击xcom选项卡,就可以查看xcom对象,同时任务正在运行。