Native Application Framework 中声明式共享中的用户定义的函数和存储过程

Declarative Native Apps 可以添加 存储过程用户定义的函数 (UDFs) 来查询、可视化和探索数据。本主题介绍如何在应用程序中添加这些对象。

支持的用户定义的函数和存储过程

您可以在 Declarative Native App 中共享以下类型的用户定义的函数 (UDFs) 和存储过程 (sproc):

在应用程序中添加用户定义的函数和存储过程

要在 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]
Copy

在此示例中,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]
Copy

在前面的示例中,COUNTRY_POP_BY_YEAR_2000 视图是私有的,因为没有任何角色被授予访问它的权限,但 private 参数允许逻辑对象访问它。VIEWER 应用程序角色可以执行存储过程,但不能直接查询私有视图。请注意,COUNTRY_POP_BY_YEAR_2000 视图引用不需要包含在 manifest.yaml 文件中,以便视图访问它们。

清单引用

此功能将以下字段添加到 manifest.yaml 文件中:

functions.{named function} 字段

每个命名函数(列表,必填 [OneOfRequired]):支持以下名称值对:

procedures.{named procedure} 字段

每个命名存储过程(列表,必填 [OneOfRequired]):支持以下名称值对:

清单文件示例

以下代码块是 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
Copy

限制

支持的语言和工具

用 Python、Java、Javascript 和 Scala 编写的 Snowpark UDFs 以及存储过程。不支持 Snowpark Container Service Functions。

数据对象和逻辑对象的架构

您必须为数据对象(表和视图)和逻辑对象(UDFs 和存储过程)使用单独的架构。例如,您可以将名为 DATA_SCHEMA 的架构用于表和视图,将名为 LOGIC_SCHEMA 的架构用于 UDFs 和存储过程。

引用私有对象

UDFs 和存储过程必须通过架构限定名称引用私有对象。逻辑对象不能通过完全限定名称引用私有对象。

对象计数

Declarative Native App 最多可包含 100 个 UDFs 和存储过程。要提高此限制,请联系 Snowflake 支持部门

动态表

不支持在 UDFs 和存储过程中引用动态表。

语言: 中文