查询标签在snowflake中无法通过任务设置

3
我们有一个存储过程,它会改变会话并将查询标签参数设置为某个值。当该存储过程直接通过调用语句调用时,查询标签被设置,但是当通过任务调用该存储过程时,查询标签没有被设置。请提供建议。
CREATE OR REPLACE TASK mytask
    WAREHOUSE = COMPUTE_WH
    SCHEDULE = '1 minute'
AS CALL dummy();

create or replace procedure dummy()
    RETURNS VARCHAR(50)
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
as $$    

snowflake.execute( {sqlText: "ALTER SESSION SET QUERY_TAG = 'execute_dummy_proc'" } );
var sql_command = "INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP())"; 
snowflake.execute ({sqlText: sql_command});    

$$;
2个回答

2

我重新使用了提供的代码。只是在你的任务中将第二个查询更改为基本选择,使其更加简单。

CREATE OR REPLACE TASK mytask
WAREHOUSE = COMPUTE_WH
SCHEDULE = '1 minute'
AS CALL dummy();

create or replace procedure dummy()
    RETURNS VARCHAR(50)
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
as $$    

snowflake.execute( {sqlText: "ALTER SESSION SET QUERY_TAG = 'execute_dummy_proc'" } );
var sql_command = "SELECT 1"; 
snowflake.execute ({sqlText: sql_command});     
$$;

如下截图所示,任务有两个连续运行,每次第二个查询(SELECT 1)都被有效标记。

enter image description here

在Snowflake中,每个任务都在新会话中执行,因此查询标记只会出现在alter session之后。我在这里没有看到任何问题。以防万一,您可以在任务创建时设置变量会话。
例如:
CREATE OR REPLACE TASK mytask
WAREHOUSE = COMPUTE_WH
SCHEDULE = '1 minute'
QUERY_TAG = 'mytag'
AS CALL dummy();

我的客户账户好像出了问题。在我的试用账户中,通过任务设置完美正常。但是在客户账户中却不能正常设置。还需要进行其他设置才能解决客户账户中的问题吗? - Riya
为了检查问题是否与您的客户帐户有关,您可以尝试使用 ALTER ACCOUNT MY_ACCOUNT SET QUERY_TAG ='' 进行测试。如果您没有账户管理员权限,则可以设置 SESSION 或 USER 级别,并通过任务调用该过程以检查查询标记是否已设置。 - Himanshu Kandpal

0

某个角色运行的查询无法使用层次结构较低的另一个角色在历史记录中查看。为了解决这个问题,我们在任务使用的仓库上授予以下授权:GRANT MONITOR ON WAREHOUSE CUSTOM_WH TO ROLE "DEVELOPER ROLE";

此后,我们能够看到任务运行的查询并获取查询标签集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接