Native Application Framework 中声明式共享中的用户定义的函数和存储过程¶
Declarative Native Apps 可以添加 存储过程 和 用户定义的函数 (UDFs) 来查询、可视化和探索数据。本主题介绍如何在应用程序中添加这些对象。
支持的用户定义的函数和存储过程¶
您可以在 Declarative Native App 中共享以下类型的用户定义的函数 (UDFs) 和存储过程 (sproc):
具有 OWNERS RIGHTS 或 RESTRICTED CALLERS RIGHTS 的存储过程。有关
更多信息,请参阅 了解调用方权限和所有者权限存储过程。
所有类型的 UDFs(EXTERNAL 函数除外)
在应用程序中添加用户定义的函数和存储过程¶
要在 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 应用程序角色被授予对这两个对象的访问权限。
清单引用¶
此功能将以下字段添加到 manifest.yaml 文件中:
functions.{named function} 字段¶
每个命名函数(列表,必填 [OneOfRequired]):支持以下名称值对:
``roles``(列表,可选):可以访问函数的应用程序角色的列表,例如
[analyst]。当此字段为空 ([]) 或被省略时,只有应用程序所有者和 被授予 IMPORTED PRIVILEGES 的角色接收访问权限。包含的角色必须在 顶级角色字段 中定义,并包含在 {named schema}.roles 字段中。
procedures.{named procedure} 字段¶
每个命名存储过程(列表,必填 [OneOfRequired]):支持以下名称值对:
``roles``(列表,可选):可以访问该过程的应用程序角色列表,例如,
[analyst]。当此字段为空 ([]) 或被省略时,只有应用程序所有者和 被授予 IMPORTED PRIVILEGES 的角色接收访问权限。包含的角色必须在 顶级角色字段 中定义,并包含在 {named schema}.roles 字段中。
清单文件示例¶
以下代码块是 Declarative Native App 清单文件的示例。
请注意,数据和代码对象必须位于不同的架构中。
manifest_version: 2
roles:
- VIEWER:
comment: "The VIEWER role provides access to only one view."
- ANALYST:
comment: "The ANALYST role provides access to views, the table, and logic."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- DATA_SCHEMA:
roles: [VIEWER, ANALYST]
tables:
- COUNTRY_POP_BY_YEAR:
roles: [ANALYST]
views:
- COUNTRY_POP_BY_YEAR_2000:
roles: [VIEWER, ANALYST]
- LOGIC_SCHEMA:
roles: [ANALYST]
functions:
- POPULATION_ANALYSIS_FUNCTION(NUMBER):
roles: [ANALYST]
procedures:
- POPULATION_ANALYSIS_PROCEDURE():
roles: [ANALYST]
application_content:
notebooks:
- intro_notebook:
roles: [VIEWER, ANALYST]
main_file: INTRO_NB.ipynb
- analyst_notebook:
roles: [ANALYST]
main_file: ANALYST_NB.ipynb
限制¶
- 支持的语言和工具
用 Python、Java、Javascript 和 Scala 编写的 Snowpark UDFs 以及存储过程。不支持 Snowpark Container Service Functions。
- 数据对象和逻辑对象的架构
您必须为数据对象(表和视图)和逻辑对象(UDFs 和存储过程)使用单独的架构。例如,您可以将名为
DATA_SCHEMA的架构用于表和视图,将名为LOGIC_SCHEMA的架构用于 UDFs 和存储过程。- 引用私有对象
UDFs 和存储过程必须通过架构限定名称引用私有对象。逻辑对象不能通过完全限定名称引用私有对象。
- 对象计数
Declarative Native App 最多可包含 100 个 UDFs 和存储过程。要提高此限制,请联系 Snowflake 支持部门。
- 动态表
不支持在 UDFs 和存储过程中引用动态表。