雪花 UDF 调用“显示共享”功能
Posted
技术标签:
【中文标题】雪花 UDF 调用“显示共享”功能【英文标题】:Snowflake UDF calling "Show Shares" function 【发布时间】:2020-01-09 16:16:45 【问题描述】:是否可以在 Snowflake 的 FUNCTION 或 PROCEDURE 中发出“显示共享”函数调用?由于信息模式中没有元数据对象来查询有关共享的信息,因此我们正在寻找一种方法来创建 UDF 以获取此元数据并根据结果采取行动。
尝试执行以下代码时:
CREATE OR REPLACE PROCEDURE get_share_metadata()
RETURNS VARIANT
LANGUAGE javascript
AS
$$
var x=snowflake.execute( sqlText: "SHOW SHARES" );
$$
;
call get_share_metadata();
返回以下错误: 存储过程 GET_SHARE_METADATA 中的执行错误:存储过程执行错误:不支持的语句类型“SHOW SHARE”。在 Snowflake.execute,第 2 行位置 20
【问题讨论】:
【参考方案1】:如果存储过程设置为 EXECUTE AS CALLER,您可以在存储过程中执行SHOW ....
命令仅。
当作为调用者执行时,执行过程的角色必须具有在过程中执行命令的权限。
示例:
SHOW SHARES
只能由 ACCOUNTADMIN 角色访问(从技术上讲,任何角色都可以成功运行命令,但结果仅限于 accountadmin)。
SHOW USERS
只能使用对该帐户具有 MANAGE GRANTS 权限的任何角色成功执行。
文档:
https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#label-owners-rights-stored-procedures
【讨论】:
【参考方案2】:我不确定函数与存储过程的区别,但根据您要执行的操作,您是否考虑过仅使用 RESULT_SCAN?
SHOW SHARES;
SELECT * FROM TABLE(RESULT_SCAN(last_query_id()));
【讨论】:
这将在雪花 GUI 中工作,但命令“SHOW SHARES”在存储过程(FUNCTION 或 UDF)的上下文中无效。 它适用于很多事情,但您的用例尚未在您的帖子中详细说明。您需要将它放在存储过程或函数中的原因是什么? 我们正在构建一个 CI/CD 管道,作为验证步骤的一部分,我们验证操作是否按预期完成。 CI/CD 管道需要有一个返回成功或失败的语句。多个语句一起运行的概念需要封装在一个过程中。 “last_query_id”的概念并不能保证顺序。 如果 SHARE 信息在信息架构元数据中可用,那就太好了。 根据您在 CI/CD 管道工具中使用的连接器类型,您可以执行 SHOW SHARES 命令,捕获该语句的 query_id,然后使用 query_id 执行 result_scan()陈述。我以前在应用程序中这样做过。我意识到如果它在信息模式中可用会更容易。以上是关于雪花 UDF 调用“显示共享”功能的主要内容,如果未能解决你的问题,请参考以下文章