Snowflake cloud data platform 在雪花任务中,我们是否有类似于子任务将等待,直到满足依赖关系,而不是父任务条件

Snowflake cloud data platform 在雪花任务中,我们是否有类似于子任务将等待,直到满足依赖关系,而不是父任务条件,snowflake-cloud-data-platform,snowflake-task,snowflake-stream,snowflake-pipe,Snowflake Cloud Data Platform,Snowflake Task,Snowflake Stream,Snowflake Pipe,我有4条小溪。 A_流,B_流,C_流,D_流 我有一个任务链,其中一个任务是父任务,它有三个子任务(B任务、C任务、D任务) 假设一个_任务被触发并完成,但当它执行C_任务流时,C_流并没有数据,所以任务并没有被触发。 5分钟后,C_流获得数据 这里的问题是数据永远不会从C_流加载到目标表,因为下次不会触发_任务。我们该如何应对这种情况 我无法分离这些任务,因为它们在同一个目标表上运行 在雪花任务中,我们是否有类似于子任务将等待依赖性满足的情况?在您的示例中,听起来A和C并不是真正相互依赖的。

我有4条小溪。 A_流,B_流,C_流,D_流

我有一个任务链,其中一个任务是父任务,它有三个子任务(B任务、C任务、D任务)

假设一个_任务被触发并完成,但当它执行C_任务流时,C_流并没有数据,所以任务并没有被触发。 5分钟后,C_流获得数据

这里的问题是数据永远不会从C_流加载到目标表,因为下次不会触发_任务。我们该如何应对这种情况

我无法分离这些任务,因为它们在同一个目标表上运行


在雪花任务中,我们是否有类似于子任务将等待依赖性满足的情况?

在您的示例中,听起来A和C并不是真正相互依赖的。为什么不分别加载它们呢?A和C是相互依赖的,因为它们从不同的源获取数据,这就是为什么我创建了4个不同的流,但它们需要按顺序处理并加载到同一个表中。在加载到目标表之前,它会根据先前加载的文件进行一些验证。目前我使用的是像autosys这样的job sechduler工具,但在Snowflake中我只想使用task。如果它们相互依赖,那么从其中一个获取数据而不是从另一个获取数据似乎很奇怪。这正是我所关心的。也许这将有助于更好地了解您当前的计划程序如何处理这种情况,然后我们可以为您制定与任务相关的解决方案。在大多数情况下,if将获得数据,但我也必须考虑最坏的情况。在当前情况下,任务a在任务成功后是主任务,只有B被触发,B任务C成功后是主任务。但在雪花任务中,我尝试复制它,但若流并没有数据,它只是跳过,并且在父任务流有数据之前从未被触发。但在理想情况下,子任务应该等到流有数据,因为它是启动条件之一。那么,您不需要为每个任务查看流。您可以通过基于前一个进程的成功运行表B和表C来复制当前进程的相同行为。你不必有WHEN子句,在你的例子中,它听起来不像a和C是相互依赖的。为什么不分别加载它们呢?A和C是相互依赖的,因为它们从不同的源获取数据,这就是为什么我创建了4个不同的流,但它们需要按顺序处理并加载到同一个表中。在加载到目标表之前,它会根据先前加载的文件进行一些验证。目前我使用的是像autosys这样的job sechduler工具,但在Snowflake中我只想使用task。如果它们相互依赖,那么从其中一个获取数据而不是从另一个获取数据似乎很奇怪。这正是我所关心的。也许这将有助于更好地了解您当前的计划程序如何处理这种情况,然后我们可以为您制定与任务相关的解决方案。在大多数情况下,if将获得数据,但我也必须考虑最坏的情况。在当前情况下,任务a在任务成功后是主任务,只有B被触发,B任务C成功后是主任务。但在雪花任务中,我尝试复制它,但若流并没有数据,它只是跳过,并且在父任务流有数据之前从未被触发。但在理想情况下,子任务应该等到流有数据,因为它是启动条件之一。那么,您不需要为每个任务查看流。您可以通过基于前一个进程的成功运行表B和表C来复制当前进程的相同行为。您不必有WHEN子句。
CREATE TASK A_TASK
WAREHOUSE = XYZ
SECHDULE = '15 MINUTE'
WHEN SYSTEM$STREAM_HAS_DATA('A_STREAM)
AS 
DO Something;
CREATE TASK C_TASK
WAREHOUSE=XYZ
AFTER A_TASK
WHEN SYSTEM$STREAM_HAS_DATA('C_STREAM')
AS 
DO SOMETHING;