雪花 - 系统/内置存储过程

时间:2021-05-07 21:02:01

标签: snowflake-cloud-data-platform

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 个答案:

答案 0 :(得分:1)

Snowflake 在过去 6 年中一直是一个不断发展的产品。当它第一次发布时,不支持动态 SQL aka Procedures,也很少支持数据库自省,就像在 PostgreSQL 的系统表中一样。

许多“做 X”或“告诉我 Y”是通过相当丑陋的函数调用完成的,这清楚地向您展示了逃离沙坑的地方(与 PostgreSQL 相比,其中 db health/state 也是“表” )。我记得我们的团队编写了支持从 SHOW 命令读取结果的代码,因为 RESULT_SCAN 不存在。

所以平台发生了很大的变化,现在用“功能”的心智模型只读,“程序”改变心态,似乎做的事情符合模型。