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

Calling a stored procedure using a task in Snowflake

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

这是我将值插入 table

的过程
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_();

但是当我检查时,上面的任务没有 运行 并且值没有插入 table。

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

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

即使这个任务也没有成功。不明白我哪里做错了

创建任务后,必须执行

ALTER TASK … RESUME

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

创建任务是不够的。下一步是恢复它,因为默认情况下任务的状态为“暂停”。

你的情况是

ALTER TASK mytask_hour resume;

结果:任务按您的计划运行。

最重要的是你必须记住

  • resuming/suspending 一项任务需要对任务的 OWNERSHIP 或 OPERATE 权限
  • OWNERSHIP-role有EXECUTE T​​ASK权限,可由ACCOUNT ADMIN分配

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