雪花任务返回必须授予所有者角色的使用错误

Snowflake task is returning a usage error that must be granted to owner role

我有一个属于 prod_admin 的测试程序:

CREATE OR REPLACE PROCEDURE test()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
$$
query = "SELECT * FROM DWH_OPS.CHANGE_HISTORY";
stmt = snowflake.createStatement({sqlText: query}).execute();
stmt.next();
return stmt;
$$;

并且 运行 此程序的任务由 task_admin 拥有:

CREATE OR REPLACE TASK test_procedure
    WAREHOUSE = 'COMPUTE_WH'
    TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
    SCHEDULE = '5 MINUTE'
AS
   call PROD_DB.DWH_OPS.TEST();

任务 运行ning 后,我们收到以下错误:

USAGE privilege on the task's warehouse must be granted to owner role

两个角色都对同一个仓库拥有使用权限。我们已经 运行 show grants 这两个角色,他们确实有访问权限。

当 运行 使用 CALL test() 连接过程时,它使用两个角色都有效。

我的任务有 2 个问题:

时间戳会话格式:

原来我们任务中的这一行:

TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'

正在将会话的时间戳设置为与我们数据中的格式不同的格式。

CREATE OR REPLACE TASK DATA_LOAD_TASK
    WAREHOUSE = 'COMPUTE_WH'
    // TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
    SCHEDULE = 'USING CRON 00 18 * * * Europe/Zurich'
AS
    CALL proc1();

Snowflake parameters文档中所述,此行会将整个会话期间的格式设置为任务中指定的格式。

通过不指定此参数的格式,它将设置为AUTO,这将留给Snowflake根据字段类型进行必要的时间戳转换。

程序和任务的所有权和使用权:

为了正确处理调用一个调用许多其他过程的任务,我们应该将所有使用过的过程的使用权授予拥有 task 的角色。即使我们正在调用一个过程。

grant usage on procedure proc1(varchar, varchar, varchar, array) to role prod_taskadmin;
grant usage on procedure proc2(varchar, varchar, varchar, varchar) to role prod_taskadmin;
grant usage on procedure proc3(varchar, varchar, varchar, varchar) to role prod_taskadmin;

过程应由对模式中的所有对象具有权限的角色拥有:

grant ownership on procedure proc1(string, string, string, array) to role prod_sysadmin;
grant ownership on procedure proc2(string, string, string, array) to role prod_sysadmin;
grant ownership on procedure proc3(string, string, string, array) to role prod_sysadmin;