【问题标题】:Lack of table output functionality in Snowflake Stored ProceduresSnowflake 存储过程中缺少表输出功能
【发布时间】:2021-04-15 22:43:38
【问题描述】:
我正在重新设计我们公司的 API 以使用来自 SQL Server 的 Snowflake。我们的第一个直接障碍是我们现有的 SQL Server 存储过程返回表输出,而 Snowflake 不允许这种类型的输出。我不想完全重新设计所有东西,所以我在想:
- 以与 SQL Server 相同的方式重建我的 Snowflake 存储过程
- 退出前,将输出转储到临时表中。
- 我的返回值是表名。
- 现在我可以从临时表中返回数据了。
还有其他人对如何处理这个问题有更好的建议吗?
我知道编码,使用 python 之类的东西会更容易做到这一点,但是,我不想维护另一个 python 应用程序只是为了在雪花中检索数据。
【问题讨论】:
标签:
stored-procedures
snowflake-cloud-data-platform
【解决方案1】:
Snowflake 文档不仅描述了技术细节,还描述了使用模式,此案例已在以下位置进行了描述:
Overview of Stored Procedures
有一些间接方式可以使用存储过程的返回值:
-
您可以在另一个存储过程中调用该存储过程;外部存储过程中的 JavaScript 可以检索和存储
内部存储过程的输出。但请记住,
外部存储过程(和每个内部存储过程)仍然
无法向调用者返回多个值。
-
您可以调用存储过程,然后调用 RESULT_SCAN 函数并将为存储生成的语句 ID 传递给它
过程。
-
您可以将结果集存储在临时表或永久表中,并在从存储过程返回后使用该表
打电话。
-
如果数据量不太大,可以在一个VARIANT中存储多行多列(例如,作为JSON值)
并返回该 VARIANT。