我正在尝试以“每30分钟”的间隔设置两个dag的气流。
第一个dag(提取)如下所示:
extract_table_user_schema >>提取表用户数据>> finish_extract_table_user
第二个dag( transform )看起来像这样:
sensor_wait_for_finish_extract_table_user >> transform_table_user >> finish_transform_table_user
对于这两次任务,我都将schedule_interval设置为"*/30 * * * *"
使用execution_delta=timedelta(minutes=30)
设置了ExternalTaskSensor
我预期的任务流程是:首先运行 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文档?
我们将不胜感激!