首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪花存储过程与用户定义函数的比较

雪花存储过程与用户定义函数的比较
EN

Stack Overflow用户
提问于 2021-09-18 22:08:32
回答 2查看 443关注 0票数 1

我需要一些关于雪花存储过程与用户定义函数比较的最佳用例的指导。请问有没有一个场景比另一个更合适的指导方针?我正在努力为我的项目做出正确的选择。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-09-18 23:47:37

  • 雪花存储过程是用JavaScript编写的。myproc(x)).
  • The可以用JavaScript或SQL编写。
  • 允许存储过程返回值,但不要求返回值。
  • 存储过程作为独立语句调用,而不是语句的一部分(SELECT myfunc(x) vs CALL UDF由存储过程返回的值,与函数返回的值不同,不能直接用于myproc(x)).
  • The。

https://docs.snowflake.com/en/sql-reference/stored-procedures-overview.html#differences-between-stored-procedures-and-udfs

以及选择创建存储过程或UDF的指南:

https://docs.snowflake.com/en/sql-reference/stored-procedures-overview.html#choosing-to-create-a-stored-procedure-or-a-udf

票数 1
EN

Stack Overflow用户

发布于 2021-09-20 18:13:01

重要的区别在于对象在执行堆栈中的位置。Snowflake中的模式对于数据库系统来说非常典型:您有一个客户端程序向Snowflake发出SQL,系统在Snowflake中创建一个计划;然后该计划被分发到执行引擎,执行引擎实际执行这项工作。

视觉上:

代码语言:javascript
复制
[Client Program] --SQL--> [Planner] --plan--> [Execution Engine]

用户定义的函数实际上是构建在计划中并由执行引擎运行的东西。因为它实际上是计划的一部分,所以Snowflake将做一些事情,比如保证事务语义,并在仓库中分发和扩展工作。

另一方面,存储过程实际上取代了客户端程序--它只是碰巧在Snowflake中存储和执行。从管理的角度来看,这很棒,但Snowflake不能做任何特殊的事情来扩展这一点,也不能提供任何关于事务的特殊保证。这只是一个客户端程序。

为了给出一个具体的例子来说明它们的区别,假设我想从我的存储过程或函数中运行查询。对于一个过程来说,这是没有问题的:它非常像任何发出查询的客户端。

另一方面,也许我希望我的函数发出一个简单的查询,从用户的标识符中查找用户名。我们不能,但是假设我们能够将该查询包装在一个名为get_name()的函数中。现在,我可能会发出如下查询:

代码语言:javascript
复制
SELECT id, get_name(id)
FROM my_table

但是,让我们仔细考虑一下当这个程序运行时会发生什么。该查询包括我的函数,因此包含此调用的计划将分布在我的仓库中。但假设my_table有100万条记录:这意味着对get_name()的100万次调用和100万次查询将被发送到Snowflake。

唉哟。所以结果就是你不能这样做。

如果您希望在查询中实际运行的宿主逻辑,则需要一个函数。有时,您希望扩展您的逻辑并在查询中运行它,但是,像上面的情况一样,您不能--那么您需要更聪明地组织您的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69238814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档