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

R0b*_*ert 2 javascript sql stored-procedures snowflake-cloud-data-platform

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

这是我将值插入表中的过程

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;
    $$;
Run Code Online (Sandbox Code Playgroud)

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

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_();
Run Code Online (Sandbox Code Playgroud)

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

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

create task mytask_hour
  warehouse = COMPUTE_WH
  schedule = '1 minute'
as
  call TASK_();
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*cel 5

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

在你的情况下,声明是

ALTER TASK mytask_hour resume;
Run Code Online (Sandbox Code Playgroud)

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

最重要的是,你必须记住

  • 恢复/暂停任务需要对该任务具有 OWNERSHIP 或 OPERATE 权限
  • OWNERSHIP-role 具有 EXECUTE T​​ASK 权限,可以由 ACCOUNT ADMIN 分配

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