声明式共享原生应用程序中的用户定义函数和存储过程¶
Declarative Native Apps 可以包含 存储过程 和 用户定义函数 (UDFs),用于查询、可视化和探索数据。本主题介绍如何在您的应用程序中包含这些逻辑对象。
支持的用户定义的函数和存储过程¶
您可以在 Declarative Native App 中共享以下类型的用户定义的函数 (UDFs) 和存储过程 (sproc):
具有 OWNERS RIGHTS 或 RESTRICTED CALLERS RIGHTS 的存储过程。有关更多信息,请参阅 了解调用者权限和所有者权限存储过程。
所有类型的 UDFs(EXTERNAL 函数除外)
用 Python、Java、Javascript 和 Scala 编写的 Snowpark UDFs 以及存储过程。不支持 Snowpark Container Service Functions。
在应用程序中添加用户定义的函数和存储过程¶
要在 Declarative Native App 中添加 UDFs 和存储过程,请将对象的名称及其权限添加到 manifest.yaml 文件中。您不需要像使用笔记本那样使用单独的文件添加对象。
以下示例演示如何在 manifest.yaml 文件中添加 UDF 和存储过程:
manifest_version: 2
roles:
- ANALYST:
comment: "The ANALYST role provides access to logic objects."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- LOGIC_SCHEMA:
roles: [ANALYST]
functions:
- POPULATION_ANALYSIS_FUNCTION(NUMBER):
roles: [ANALYST]
procedures:
- POPULATION_ANALYSIS_PROCEDURE():
roles: [ANALYST]
在此示例中,POPULATION_ANALYSIS_FUNCTION UDF 和 POPULATION_ANALYSIS_PROCEDURE 存储过程包含在 manifest.yaml 文件中。ANALYST 应用程序角色被授予对这两个对象的访问权限。
使用 UDFs 和存储过程访问私有(非共享)对象¶
您可以使用 UDFs 和存储过程来访问私有(非共享)表和视图。例如,数据库可以有一个对使用者不可见的视图,但使用者可以使用存储过程从该视图中检索数据。
要允许客户使用 UDFs 和存储过程访问私有对象,请在 manifest.yaml 文件中使用 private: true 关键字标记该对象。
以下示例演示如何允许存储过程访问 manifest.yaml 文件中的私有表:
manifest_version: 2
roles:
- VIEWER:
comment: "The VIEWER role can access a stored procedure that retrieves data from a view, but not the underlying view."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- DATA_SCHEMA:
views: # This view is private as no roles are granted
- COUNTRY_POP_BY_YEAR_2000:
private: true
- LOGIC_SCHEMA:
roles: [VIEWER]
procedures:
- POPULATION_DISPLAY_PROCEDURE():
roles: [VIEWER]
在前面的示例中,COUNTRY_POP_BY_YEAR_2000 视图是私有的,因为没有任何角色被授予访问它的权限,但 private 参数允许逻辑对象访问它。VIEWER 应用程序角色可以执行存储过程,但不能直接查询私有视图。请注意,COUNTRY_POP_BY_YEAR_2000 视图引用不需要包含在 manifest.yaml 文件中,以便视图访问它们。
限制¶
- 支持的语言和工具
用 Python、Java、Javascript 和 Scala 编写的 Snowpark UDFs 以及存储过程。不支持 Snowpark Container Services 函数。
- 数据对象和逻辑对象的架构
您必须为数据对象(表和视图)和逻辑对象(UDFs 和存储过程)使用单独的架构。例如,您可以将名为
DATA_SCHEMA的架构用于表和视图,将名为LOGIC_SCHEMA的架构用于 UDFs 和存储过程。- 引用私有对象
UDFs 和存储过程必须通过架构限定名称引用私有对象。逻辑对象不能通过完全限定名称引用私有对象。
- 对象计数
Declarative Native App 最多可包含 100 个 UDFs 和存储过程。要提高此限制,请联系 Snowflake 支持部门。
- 动态表
不支持在 UDFs 和存储过程中引用动态表。