User-Defined Functions and Stored Procedures in Declarative Shared Native Applications¶
Declarative Native Apps can include stored procedures and user-defined functions (UDFs) to query, visualize, and explore the data. This topic describes how to include these logic objects in your app.
支持的用户定义的函数和存储过程¶
您可以在 Declarative Native App 中共享以下类型的用户定义的函数 (UDFs) 和存储过程 (sproc):
Stored procedures that have OWNERS RIGHTS or RESTRICTED CALLERS RIGHTS. For more information, see Understanding caller’s rights and owner’s rights stored procedures.
所有类型的 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 文件中,以便视图访问它们。
限制¶
- 支持的语言和工具
Snowpark UDFs and stored procedures written in Python, Java, Javascript, and Scala. Snowpark Container Service functions are not supported.
- 数据对象和逻辑对象的架构
您必须为数据对象(表和视图)和逻辑对象(UDFs 和存储过程)使用单独的架构。例如,您可以将名为
DATA_SCHEMA的架构用于表和视图,将名为LOGIC_SCHEMA的架构用于 UDFs 和存储过程。- 引用私有对象
UDFs 和存储过程必须通过架构限定名称引用私有对象。逻辑对象不能通过完全限定名称引用私有对象。
- 对象计数
Declarative Native App 最多可包含 100 个 UDFs 和存储过程。要提高此限制,请联系 Snowflake 支持部门。
- 动态表
不支持在 UDFs 和存储过程中引用动态表。