【发布时间】:2019-11-01 09:47:58
【问题描述】:
我在 Snowflake 中遇到问题,其中任务执行存储过程,并且 SP 正在使用我想用于记录目的的会话变量 QUERY_TAG。 当 Task 执行 SP 时,我会得到错误: “会话变量 '$QUERY_TAG' 不存在” EXECUTE AS CALLER 在那里 我尝试在哪里设置 QUERY_TAG(在第一个任务前置代码或定义中)并不重要。
任务和 SP 由我作为 SYSADMIN 创建
当我在查询编辑器(Snowflake、DBeaver 等)中执行 SP 时,它运行良好,因此 SP 中没有编码错误。 SET QUERY_TAG = '一个不错的查询标签' 调用 TASK_SCHEMA.SP_TASK_ONE()
当我在 Worksheet 或 DBeaver 或类似工具中调用它时,它运行良好。 SP 中的两种方式都有效(内联 SQL 或通过 getQueryTag 函数)
这是Tasks和SP的代码
CREATE OR REPLACE TASK TASK_SCHEMA.TASK_ONE_PRECOND
WAREHOUSE = TASK_WH
SCHEDULE = '2 minute'
QUERY_TAG = 'My Query Tag'
AS
SET QUERY_TAG = 'My Query Tag 2'
CREATE OR REPLACE TASK TASK_SCHEMA.TASK_ONE
WAREHOUSE = TASK_WH
AFTER TASK_SCHEMA.TASK_ONE_PRECOND
AS
CALL TASK_SCHEMA.SP_TASK_ONE()
create or replace procedure TASK_SCHEMA.SP_TASK_ONE()
RETURNS VARCHAR(50)
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
as $$
function getQueryTag()
{
var QueryTag;
rs_QT = snowflake.execute ( { sqlText: `SELECT $QUERY_TAG;` } );
if( rs_QT.next())
{
QueryTag = rs_QT.getColumnValue(1); // get the QueryTag
}
return QueryTag;
}
var qtag = getQueryTag();
//rs = snowflake.execute ( { sqlText:
//`INSERT INTO "LOG"."TESTSESSIONLOG"
// ("SESSION_NAME")
//SELECT $QUERY_TAG
//` } );
snowflake.execute({
sqlText: `INSERT INTO LOG.TESTSESSIONLOG
(SESSION_NAME)
VALUES (?)`
,binds: [ qtag]
});
return "SESSION_OK";
$$;
【问题讨论】:
标签: stored-procedures task session-variables snowflake-cloud-data-platform