Snowflake - 系统/内置存储过程
Posted
技术标签:
【中文标题】Snowflake - 系统/内置存储过程【英文标题】:Snowflake - system/built-in stored procedures 【发布时间】:2021-05-07 21:02:01 【问题描述】:Snowflake 是否提供任何存储过程?
SHOW PROCEDURES IN ACCOUNT;
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_builtin" != 'N';
-- 0 rows
SHOW FUNCTIONS IN ACCOUNT;
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_builtin" != 'N';
-- 571
我们有相当广泛的函数列表,但我找不到单个存储过程。
一些函数(例如SYSTEM$CANCEL_ALL_QUERIES
)包含副作用,这意味着它们可以是存储过程(它们甚至支持通过CALL执行):
SELECT SYSTEM$CANCEL_ALL_QUERIES(CURRENT_SESSION()::INT);
CALL SYSTEM$CANCEL_ALL_QUERIES(CURRENT_SESSION()::INT);
这种方法背后有什么理由吗?
【问题讨论】:
【参考方案1】:Snowflake 在过去 6 年中一直是一个不断发展的产品。当它首次发布时,不支持动态 SQL aka 过程,并且很少支持数据库自省,就像您在 PostgreSQL 的系统表中一样。
如此多的“做 X”或“告诉我 Y”是通过相当丑陋的函数调用完成的,这清楚地向您展示了逃离沙坑的地方(与 PostgreSQL 相比,数据库健康/状态也是“表” )。我记得我们的团队编写代码支持从 SHOW 命令读取结果,因为 RESULT_SCAN 不存在。
所以平台发生了很大变化,现在使用“功能”的心智模型,“程序”改变思维方式,似乎适合模型的事情。
【讨论】:
这更有意义。普通的 UDF 函数不会有副作用,SF 可以,是的,函数一次用于代替不存在的过程。以上是关于Snowflake - 系统/内置存储过程的主要内容,如果未能解决你的问题,请参考以下文章