如何在Qlik Data Editor中执行Snowflake存储过程并获取表格结果
Qlik Data Editor调用Snowflake存储过程获取结构化结果的解决方案
核心原因
Snowflake的CALL语句默认返回执行状态消息而非结构化结果集,且Qlik Data Editor默认不会持久化CALL语句返回的隐式结果,因此无法直接通过单次调用拿到表格数据,可通过以下两种方案解决:
方案1:通过RESULT_SCAN函数捕获返回结果
适用于存储过程本身配置了返回结果集的场景:
- 首先开启会话级结果持久化配置,执行语句:
SET RESULT_SCAN_PERSISTENCE = 'SESSION'; - 执行存储过程调用:
CALL "ODS_BI".Dimension('SK0009', 'DEBIT', 1, NULL); - 调用完成后立即通过
RESULT_SCAN读取上一次查询的结果:SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())); - 注意:该方案获取的结果仅当前会话可见,默认有效期24小时,会话关闭后自动失效
方案2:通过中间表中转结果
适用于存储过程会将计算结果写入临时表/永久表的场景:
- 第一步执行
CALL语句触发存储过程运行,完成数据写入逻辑 - 第二步直接执行
SELECT语句查询存储过程写入的结果表,获取结构化数据即可,无需捕获CALL语句的返回值
Qlik侧配置注意事项
- Qlik Data Editor连接Snowflake的配置项中,需要开启允许多条语句执行,否则
CALL和后续的SELECT语句会被拆分为独立会话,无法获取到当前会话的RESULT_SCAN结果或临时表数据 - 若为定期调度场景,建议调整存储过程逻辑将结果写入固定的ODS结果表,Qlik直接同步该表数据即可,稳定性更高
若执行后仍无法获取结果,可先在Snowflake控制台单独调用存储过程后执行
RESULT_SCAN验证,确认存储过程本身的返回类型为TABLE类型而非标量/字符串类型。
内容的提问来源于stack exchange,提问作者Sai Kishore
相关产品推荐
相关产品推荐

