如何在snowflake中将存储过程的输出作为任务输出



我创建了一个存储过程,它在手动执行时返回带有成功消息和插入的行数的字符串或错误消息,如未找到文件或未加载数据。当我调用带有task的相同存储过程时,它显示(task_history)为成功。并且无法发现数据是否已加载。必须手工检查。

当我提到以下问题Snowflake时,一个工作过程在计划任务中调用它时没有成功执行

过程和任务具有相同的所有者(所有者具有全局执行任务权限)。

但在手动和任务调用过程中,数据都在被更新。

如果存储过程返回错误,如何使返回值出现在task中,并使任务不执行后续任务。

您可以使用SYSTEM$SET_RETURN_VALUE在第一个任务中设置返回值。

在任务树中,任务可以调用此函数来设置返回值。将此任务标识为前置任务的另一个任务(在任务定义中使用AFTER关键字)可以检索由前置任务设置的返回值。

你可以使用SYSTEM$ get_frow_value(例如,如果return_value不执行任何操作)

返回值将出现在TASK_HISTORY中用于监视。

从存储过程中获取返回值以保存到任务历史记录

  1. 存储过程应该"EXECUTE AS caller">
  2. 你需要调用system$set_return_value返回值

例子

CREATE OR REPLACE PROCEDURE MySchema.MyStoredProcedure()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS $$
let command1 =  = `DELETE FROM MySchema.MyTable WHERE rownum > 10;`;
let stmt1 = snowflake.createStatement({sqlText: command1});
let rs = stmt1.execute();
rs.next();
let deleted = rs.getColumnValue(1);
//This requires the SP to be run as CALLER - This return value is logged in Task History
stmt1 = snowflake.createStatement({sqlText:`call system$set_return_value(' { "RowsDeleted": ${deleted} }');`});
rs = stmt1.execute();
return { "RowsDeleted": deleted };
$$;

最新更新