6

我有一个计划每 15 分钟运行一次的任务:

CREATE OR REPLACE TASK mytask
  WAREHOUSE = 'SHARED_WH_MEDIUM'
  SCHEDULE = '15 MINUTE'
  STATEMENT_TIMEOUT_IN_SECONDS = 3600,
  QUERY_TAG = 'KLIPFOLIO'
AS
  CREATE OR REPLACE TABLE mytable AS
   SELECT * from  xxx; 
;

alter task mytask resume;

我从task_history()任务的输出中看到SCHEDULED

select * from table(aftonbladet.information_schema.task_history(task_name => 'MYTASK')) order by scheduled_time;
QUERY_ID    NAME    DATABASE_NAME   SCHEMA_NAME QUERY_TEXT  CONDITION_TEXT  STATE   ERROR_CODE  ERROR_MESSAGE   SCHEDULED_TIME  COMPLETED_TIME  RETURN_VALUE
***     MYTASK  *** *** ***     SCHEDULED           2020-01-21 09:58:12.434 +0100       

但我希望它立即运行而无需等待 SCHEDULED_TIME,有没有办法做到这一点?

4

3 回答 3

4

目前无法手动执行任务。但是,您可以将任务计划更改为 1 分钟,让它运行,然后将其更改回 15 分钟,这样您就不会等待整整 15 分钟。我已经多次看到这个请求,并且有一个关于 Lodge ( https://community.snowflake.com/s/ideas ) 的想法,您应该支持(搜索“任务”,我认为这将是其中之一)顶级想法)。由于任务仍处于公共预览阶段,因此如果这些类型的想法获得大量投票,它们很可能会被审查并优先考虑。

于 2020-01-21T14:05:54.590 回答
4

以迈克的回答为基础:

  • 您可以有一个每分钟执行一次的任务,但前提是流中有数据!
  • 为此,您可以创建一个表和流,以决定是否每分钟触发一次任务。
  • 这个根任务应该删除插入到流中的数据,以防止任务再次运行。
  • 因此,您可以在每次将数据带入流时执行相关任务,但仅在流具有新数据时执行。
  • 这仅依赖于运行任务的能力when SYSTEM$STREAM_HAS_DATA()
-- stream so this task executes every minute, but only if there's new data
create table just_timestamps_stream_table(value varchar);
create stream just_timestamps_stream on table just_timestamps_stream_table;

-- https://docs.snowflake.com/en/user-guide/tasks-intro.html
create or replace task mytask_minute
  warehouse = test_small
  schedule = '1 MINUTE'
  when SYSTEM$STREAM_HAS_DATA('just_timestamps_stream')
as
-- consume stream so tasks doesn't execute again
delete from just_timestamps_stream_table;

-- the real task to be executed
create or replace task mytask_minute_child1
  warehouse = test_small
  after mytask_minute
as
insert into just_timestamps values(current_timestamp, 'child1');

完整示例:

于 2021-01-14T00:05:09.317 回答
3

Snowflake 现在支持手动运行任务。只需使用EXECUTE T​​ASK命令:

EXECUTE T​​ASK 手动触发计划任务(独立任务或任务树中的根任务)的异步单次运行,独立于为任务定义的计划。根任务的成功运行会触发树中子任务的级联运行,因为它们的先前任务完成,就好像根任务已按其定义的时间表运行一样。

此外,在启动模式下不需要任务。即使处于挂起模式的任务也可以手动执行。

于 2022-02-19T06:02:21.417 回答