使用ExternalTask​​Sensor

时间:2018-08-28 09:03:18

标签: python airflow directed-acyclic-graphs

我正在尝试以“每30分钟”的间隔设置两个dag的气流。

第一个dag(提取)如下所示:

  

extract_table_user_schema >>提取表用户数据>> finish_extract_table_user

extract dag

第二个dag( transform )看起来像这样:

  

sensor_wait_for_finish_extract_table_user >> transform_table_user >> finish_transform_table_user

transform dag

对于这两次任务,我都将schedule_interval设置为"*/30 * * * *"

使用execution_delta=timedelta(minutes=30)设置了ExternalTask​​Sensor

我预期的任务流程是:首先运行 extract dag。然后,在完成虚拟任务finish_tranform_table_user之后,传感器将触发并运行 transform 中的任务。

第一次运行良好,但是当我等待第二次运行时,任务会自行中断。 我观察到 extract dag被transform_table_user任务中断,该任务更改了一些列名。由于列名不再匹配,因此将导致extract_table_user_data失败。

编辑:更具体地说明预期的结果和发生的结果

首先,简要介绍每个任务应该执行的操作:

(sql)extract_table_user_schema:从用户表中复制架构

(sql)extract_table_user_data:将数据从源表用户复制到该表的副本中

(虚拟)finish_extract_table_user:虚拟任务

(传感器)sensor_wait_for_finish_extract_table_user:传感器要等到提取完成为止

(sql)transform_table_user:将列字段从id重命名为user_id

(虚拟)finish_transform_table_user:虚拟任务

现在,第一次运行dag的结果是复制的模式+数据和重命名的字段。所有任务都成功 第二次运行dag时,一项任务失败,而另一项任务未运行。对方都成功。 任务extract_table_user_data失败,并显示错误消息;没有id这样的字段。 任务finish_extract_table_user未运行

生成的表是复制的架构,但没有数据重命名的字段。

因此,我假设任务transform_table_user是在复制架构后立即运行的。也许集合execution_delta=timedelta(minutes=30)错了吗?也许我误会了传感器的api文档?

我们将不胜感激!

0 个答案:

没有答案