【问题标题】:Calling a stored procedure using a task in Snowflake使用 Snowflake 中的任务调用存储过程
【发布时间】:2020-10-05 18:56:08
【问题描述】:

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

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

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

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

【问题讨论】:

标签: javascript sql stored-procedures snowflake-cloud-data-platform


【解决方案1】:

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

在你的情况下,声明是

ALTER TASK mytask_hour resume;

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

除此之外,您必须牢记这一点

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

更多信息请看这里:https://docs.snowflake.com/en/sql-reference/sql/alter-task.html

【讨论】:

  • 我只是想确保SCHEDULE = 'USING CRON 0 0 * 1-12 SUN America/Los_Angeles' TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24' 是正确的,即它每个周末都会运行任务
  • 你可以使用这个网站来验证你的表达cronmaker.com
【解决方案2】:

创建任务后,必须执行

ALTER TASK … RESUME

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

我希望这会有所帮助...丰富

附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案 通过单击答案旁边的复选标记将其从“灰色”切换为“已填充”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2022-06-18
    • 2020-06-12
    • 2021-02-06
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多