使用Snowflake中的任务调用存储过程



我写了一个任务,每个周末调用该过程。

以下是我将值插入表的过程

CREATE OR REPLACE TABLE TABLE1(DATABASE_ VARCHAR, TABLE_ VARCHAR); // Table to store values
CREATE OR REPLACE PROCEDURE TASK_()   //Procedure to insert values into table
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var str = '';
var stmt = snowflake.createStatement({sqlText: "INSERT INTO TABLE1 VALUES ('DB1','TB1')"});
stmt.execute(); 
return str;
$$;

这是我的任务,每个周末调用上述过程。

CREATE TASK mytask_hour
WAREHOUSE = COMPUTE_WH
SCHEDULE = 'USING CRON 0 0 * 1-12 SUN America/Los_Angeles'
TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
as
call TASK_();

但当我检查时,上面的任务没有运行,值也没有插入到表中。

因此,我尝试调试我的任务,并编写了一个每分钟调用上述过程的任务。

create task mytask_hour
warehouse = COMPUTE_WH
schedule = '1 minute'
as
call TASK_();

甚至这项任务也没有奏效。不明白我哪里做错了

仅仅创建一个任务是不够的。下一步是在任务具有状态"0"时恢复它;"暂停";默认情况下。

在您的情况下,声明是

ALTER TASK mytask_hour resume;

结果:任务按您的时间表运行。

最重要的是,你必须记住

  • 恢复/暂停任务需要对任务拥有所有权或OPERATE权限
  • OWNERSHIP角色具有EXECUTE TASK权限,该权限可以由ACCOUNT ADMIN分配

有关更多信息,请参阅此处:https://docs.snowflake.com/en/sql-reference/sql/alter-task.html

创建任务后,必须执行

ALTER TASK … RESUME

https://docs.snowflake.com/en/sql-reference/sql/create-task.html

最新更新