使用 Snowflake 中的任务调用存储过程
Posted
技术标签:
【中文标题】使用 Snowflake 中的任务调用存储过程【英文标题】:Calling a stored procedure using a task in 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_();
即使这个任务也没有成功。不明白我哪里做错了
【问题讨论】:
如何检查任务是否运行? @Marcel 我通过查询给我一个空表的表来检查 @R0bert 添加了一个用于故障排除任务的链接,请查看此docs.snowflake.com/en/user-guide/tasks-ts.html 【参考方案1】:创建一个任务是不够的。下一步是恢复它,因为任务默认处于“暂停”状态。
在你的情况下,声明是
ALTER TASK mytask_hour resume;
结果:任务按您的计划运行。
除此之外,您必须牢记这一点
恢复/暂停任务需要对该任务的 OWNERSHIP 或 OPERATE 权限 OWNERSHIP-role 具有 EXECUTE TASK 权限,可以由 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
我希望这会有所帮助...丰富
附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案 通过单击答案旁边的复选标记将其从“灰色”切换为“已填充”。
【讨论】:
以上是关于使用 Snowflake 中的任务调用存储过程的主要内容,如果未能解决你的问题,请参考以下文章
Snowflake 中的存储过程能否提供一个表值输出,就像我们在 SQL Server 中得到的一样
如何使用 Snowflake Javascript 存储过程或函数遍历表中的所有列?