声明式共享原生应用程序中的用户定义函数和存储过程

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 和存储过程中引用动态表。