【问题标题】:Snowflake How to resume root task after it gets suspended?雪花如何在暂停后恢复根任务?
【发布时间】:2021-05-26 00:25:13
【问题描述】:

我有以下根和子任务。一切都按预期工作,但我怎样才能在 TSK_ROOT 暂停后自动恢复它?我是否必须执行另一项检查TSK_ROOT 是否已暂停的任务?这不是破坏根任务的目的吗?

CREATE OR REPLACE TASK TSK_ROOT
    WAREHOUSE  = MYWH
    SCHEDULE = '5 MINUTE'
WHEN
    SYSTEM$STREAM_HAS_DATA('<stream_name>')
AS 
    ALTER TASK TSK_ROOT SUSPEND;
 
CREATE OR REPLACE TASK TKS_ONE
    WAREHOUSE = MYWH
    AFTER TSK_ROOT
AS
     ....

【问题讨论】:

  • 为什么在这段代码中任务会自行挂起?
  • AFTER TSK_ROOT 是我拥有的子任务的条件。子任务将在TSK_ROOT 挂起后运行。

标签: sql triggers task scheduled-tasks snowflake-cloud-data-platform


【解决方案1】:

我从 cmets 了解到的:

  • TKS_ONE 在运行 TSK_ROOT 之后运行。
  • 问题假设 TKS_ONE 仅在 TSK_ROOT 挂起后运行,因此 TSK_ROOT 包含代码以挂起自身。
  • 这不一定是真的。 TSK_ROOT 可以运行任何东西,例如select 1 xTKS_ONE 无论如何都会运行。

因此,为了避免暂停 TSK_ROOT,请不要在 TSK_ROOT 内暂停它。

检查这个例子:

【讨论】:

  • 所以AFTER 条件不依赖于被挂起的Root 任务?通过阅读文档,“为当前任务指定前置任务。当前置任务的运行成功完成时,它会触发此任务(经过短暂的延迟)。”
  • 没错。当SELECT 1 完成时,将触发第二个任务。不需要suspendfinish
【解决方案2】:

Suspend / resume 应该用于打开(恢复)或关闭(挂起)代码维护而不是作为操作功能。

也许可以试试

SCHEDULE = '使用 CRON */5 9 * * * PST8PDT'

因为你有 SYSTEM$STREAM_HAS_DATA('') 在您的 when 子句中,如果流为空,它将不会恢复您的仓库/消耗信用。

如果这是一个理论问题而不是操作问题:

对于任何具有时间表并按顺序执行任务的任务链

root(scheduled)--task1(root之后)--task2(task1之后)--task3 (任务2之后)

'suspend' 必须从左侧应用,'resume' 从右侧应用 序列可能是这样的

resumed -- suspended -- resumed -- suspended

但实际上它应该总是看起来像其中之一

resumed   -- resumed   -- resumed   -- resumed 
suspended -- resumed   -- resumed   -- resumed 
suspended -- suspended -- resumed   -- resumed 
suspended -- suspended -- suspended -- resumed 
suspended -- suspended -- suspended -- suspended 

所以在这种情况下,如果您的操作目标是运行 task1 一次。

让 root 执行类似 select current_date 的无操作语句;

用 task1 做你必须做的事 然后有 task2 '改变任务根挂起;'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2016-08-26
    • 2021-12-17
    • 2012-12-31
    • 2017-02-15
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多