Snowflake中一次性查看所有层级参数的通用视图技术咨询
Snowflake中一次性查看所有层级参数的通用视图技术咨询
嗨,我来帮你梳理下Snowflake里参数查看的这个问题~
首先先修正下你提到的几个SHOW PARAMETERS命令的对应层级注释,之前的描述有点小偏差:
SHOW PARAMETERS IN ACCOUNT;—— 查看账户层级的所有参数,不是用户级哦SHOW PARAMETERS IN USER;—— 查看当前(或指定)用户层级的参数SHOW PARAMETERS IN SESSION;—— 查看当前会话层级的参数,你之前重复写了这条,应该是笔误啦
回到你的核心问题:Snowflake有没有原生的通用视图能一次性列出所有层级(账户、用户、会话)的参数?
答案是:Snowflake没有直接的原生系统视图可以一次性返回所有层级的参数,但我们可以通过联合查询多个SHOW命令的结果来实现这个需求——因为SHOW命令的输出可以用RESULT_SCAN函数转换成可查询的关系表。
具体实现方法
方法1:分步执行+联合查询
你可以先依次执行三个SHOW命令,再通过RESULT_SCAN获取每个命令的结果并联合:
-- 第一步:依次执行三个查看命令 SHOW PARAMETERS IN ACCOUNT; SHOW PARAMETERS IN USER; SHOW PARAMETERS IN SESSION; -- 第二步:联合三个结果,添加层级标识便于区分 SELECT 'ACCOUNT' AS parameter_level, key, value, default_value, level, description FROM TABLE(RESULT_SCAN(LAST_QUERY_ID(-2))) -- 对应第一个SHOW ACCOUNT的查询结果 UNION ALL SELECT 'USER' AS parameter_level, key, value, default_value, level, description FROM TABLE(RESULT_SCAN(LAST_QUERY_ID(-1))) -- 对应第二个SHOW USER的查询结果 UNION ALL SELECT 'SESSION' AS parameter_level, key, value, default_value, level, description FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) -- 对应第三个SHOW SESSION的查询结果 ORDER BY parameter_level, key;
方法2:封装成存储过程(更便捷)
如果需要反复使用这个功能,可以把逻辑封装成一个存储过程,避免每次都手动执行多个命令:
-- 创建存储过程 CREATE OR REPLACE PROCEDURE GET_ALL_LEVEL_PARAMETERS() RETURNS TABLE( parameter_level VARCHAR, key VARCHAR, value VARCHAR, default_value VARCHAR, level VARCHAR, description VARCHAR ) LANGUAGE SQL AS $$ BEGIN -- 依次执行三个SHOW命令并记录查询ID SHOW PARAMETERS IN ACCOUNT; LET account_qid := LAST_QUERY_ID(); SHOW PARAMETERS IN USER; LET user_qid := LAST_QUERY_ID(); SHOW PARAMETERS IN SESSION; LET session_qid := LAST_QUERY_ID(); -- 联合所有结果并返回 RETURN TABLE( SELECT 'ACCOUNT' AS parameter_level, key, value, default_value, level, description FROM TABLE(RESULT_SCAN(:account_qid)) UNION ALL SELECT 'USER' AS parameter_level, key, value, default_value, level, description FROM TABLE(RESULT_SCAN(:user_qid)) UNION ALL SELECT 'SESSION' AS parameter_level, key, value, default_value, level, description FROM TABLE(RESULT_SCAN(:session_qid)) ORDER BY parameter_level, key ); END; $$; -- 调用存储过程获取所有层级参数 CALL GET_ALL_LEVEL_PARAMETERS();
补充说明
- 如果你只需要账户和用户层级的参数,可以直接查询Snowflake的
ACCOUNT_USAGE.PARAMETERS系统视图,这个视图会定期同步账户和用户级的参数,但不会包含会话级参数(会话参数是临时的,仅存在于当前会话,不会写入ACCOUNT_USAGE)。 - 用
RESULT_SCAN的时候要注意查询ID的偏移量,LAST_QUERY_ID(-n)表示往前数第n个查询的ID,确保和你执行的SHOW命令顺序对应。
内容来源于stack exchange
相关产品推荐
相关产品推荐

