教程:使用 Snowflake Native App Framework 开发应用程序

简介

本教程介绍如何使用 Native Apps Framework 创建应用程序以与其他 Snowflake 账户共享数据和相关业务逻辑。

本教程使用 Snowsight Web 界面,但您可以使用任何支持运行 SQL 的 Snowflake 客户端,例如 SnowSQL。

您将学习的内容

在本教程中,您将学习如何进行以下操作:

  • 创建包含应用程序数据和业务逻辑的应用程序包。

  • 与应用程序包共享数据。

  • 向应用程序包中添加业务逻辑。

  • 在本地测试应用程序。

  • 在 Snowsight 中查看并测试应用程序。

  • 通过创建专用列表来发布应用程序。

  • 从专用列表安装应用程序。

关于提供商和使用者

在 Native Apps Framework 的上下文中,提供商是拥有数据和业务逻辑并希望与其他 Snowflake 用户(即使用者)共享的角色和组织。使用者可以是组织内的另一个账户、公司内的其他组织或另一家公司的 Snowflake 用户。

在本教程中,您要执行的大多数任务通常由提供商执行,但这些任务可能由您的组织内的多个角色执行,包括应用程序开发者和数据库管理员。

在本教程中,您还将执行任务,模拟使用者安装应用程序所执行的操作。

先决条件

  • 必须在同一个 SQL 命令会话中运行所有 SQL 命令,因为需要会话上下文。

    例如,要在 Snowsight 中执行此操作,请将所有代码粘贴到同一个工作表中。在从一个部分推进到另外一个部分时,每个部分都以前一个部分为基础。

  • 必须能够使用 ACCOUNTADMIN 角色。

    在本教程中,您将使用 ACCOUNTADMIN 角色执行所有步骤。但在一般情况下,您使用的角色具有专为正在执行的操作而定义的权限。例如,可以为创建 UDFs 和存储过程的开发者、管理角色和权限的数据库管理员以及使用 Snowflake Collaboration 管理列表 的管理员设置不同的角色。

  • 要从专用列表安装应用程序,必须能够访问第二个 Snowflake 账户。将使用此账户来模拟使用者安装应用程序的方式。

    备注

    尽管 Native Apps Framework 支持与不同组织中的账户共享应用程序,但就本教程而言,两个账户必须位于同一组织中。

  • 在执行教程中的操作之前必须设置当前仓库。必须为会话指定仓库,并且必须先运行仓库,然后才能在会话中执行查询和其他 DML 语句。有关详细信息,请参阅 USE WAREHOUSE

创建应用程序文件

在本部分中,将创建安装脚本和清单文件。Native Apps Framework 需要这两个文件。

安装脚本

使用者在其账户中安装应用程序时自动运行的 SQL 脚本。

清单文件

包含应用程序基本配置信息的 YAML 文件。

在本教程中,将了解有关这两个文件及其内容的更多信息。还将创建自述文件,在本教程的后面部分查看和发布应用程序时,该文件会很有用。

创建安装脚本

要创建安装脚本,请执行以下操作:

  1. 在本地文件系统上创建名为 tutorial 的文件夹。这将是应用程序外部文件的根目录。

    备注

    将在后面的部分中向此文件夹添加其他文件和子文件夹。

  2. tutorial 文件夹中,创建名为 scripts 的子文件夹。

  3. 在此文件夹中,创建名为 setup.sql 的新文件。

    备注

    本教程将引用此结构和文件名作为安装脚本。但是,在构建自己的应用程序时,可以为此文件选择自己的名称和目录结构。

  4. 将以下 SQL 语句添加到此文件中:

    -- Setup script for the Hello Snowflake! application.
    
    Copy

由于安装脚本不能为空,因此要添加此行作为占位符。

为应用程序创建 README 文件

自述文件提供应用程序功能的描述。在 Snowsight 中查看应用程序时,将看到自述文件。

为应用程序创建 readme.md 文件:

  1. tutorial 文件夹中,创建名为 readme.md 的文件。

  2. 在此文件中添加以下内容:

    This is the readme file for the Hello Snowflake Application!
    
    Copy

创建清单文件

Native Apps Framework 要求每个应用程序都有清单文件。清单文件包含应用程序的元数据和配置参数。

要创建清单文件,请执行以下操作:

  1. tutorial 文件夹中,创建名为 manifest.yml 的文件。

    备注

    此文件必须命名为 manifest.yml,并且必须位于项目的根级别。其他文件的路径(包括安装脚本)与此文件的位置相关。

  2. 在此文件中添加以下内容:

    manifest_version: 1
    artifacts:
      setup_script: scripts/setup.sql
      readme: readme.md
    
    Copy

    setup_script 属性指定安装脚本相对于清单文件位置的位置。此处指定的路径和文件名必须与上面创建的安装脚本的位置相同。

    备注

    manifest_versionartifactssetup_script 属性是必需的。readme 属性是可选的。

回顾本部分所学内容

执行完本部分中的步骤后,现在应该拥有如下所示的目录结构:

/tutorial
  manifest.yml
  readme.md
  /scripts/
    setup.sql
Copy

在本部分中,学习了如何创建 Native Apps Framework 所需的安装脚本和清单文件。虽然添加到这两个文件中的内容都是基本的,但所有应用程序都必须具有这些文件。

还添加了自述文件,在 Snowsight 中查看应用程序或以列表形式发布应用程序时会显示该文件。

创建应用程序包

在本部分中,将创建应用程序包,该包将作为应用程序所需资源的容器。您将执行以下任务:

  • 创建应用程序包。

  • 在应用程序包内创建命名暂存区。

创建应用程序包

从本质上讲,应用程序包是一个 Snowflake 数据库,可以扩展以包含有关应用程序的附加信息。从这个意义上来说,它是一个应用程序的容器,其中包括:

  • 共享数据内容

  • 应用程序文件

要创建应用程序包,请执行以下操作:

  1. 要向角色授予 CREATE APPLICATION PACKAGE 权限,请运行以下命令:

    GRANT CREATE APPLICATION PACKAGE ON ACCOUNT TO ROLE accountadmin;
    
    Copy

    备注

    虽然 ACCOUNTADMIN 角色默认具有此权限,但为了能够创建应用程序包,必须确保角色已被授予此权限。

  2. 要创建应用程序包,请运行以下命令:

    CREATE APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    备注

    运行此命令后,当前上下文更改为 HELLO_SNOWFLAKE_PACKAGE。

  3. 要验证应用程序包是否已成功创建,请运行以下命令:

    SHOW APPLICATION PACKAGES;
    
    Copy

    应该会在输出的 name 列中看到 HELLO_SNOWFLAKE_PACKAGE。有关此命令的更多信息,请参阅 SHOW APPLICATION PACKAGES

在本部分中,了解到应用程序包是应用程序使用的资源的容器。还学习了如何创建应用程序包。

创建命名暂存区

在本部分中,将创建一个命名暂存区来存储 Native Apps Framework 所需的文件。还需要一个命名暂存区来存储要包含在应用程序中的任何外部代码文件。将这些文件上传到命名暂存区可使其在创建应用程序时可用。

要创建命名暂存区,请执行以下操作:

  1. 要将上下文设置为在上一部分中创建的应用程序包,请运行以下命令:

    USE APPLICATION PACKAGE hello_snowflake_package;
    
    Copy
  2. 要为命名暂存区创建所需的架构,请运行以下命令:

    CREATE SCHEMA stage_content;
    
    Copy
  3. 要创建命名暂存区,请运行以下命令。

    CREATE OR REPLACE STAGE hello_snowflake_package.stage_content.hello_snowflake_stage
      FILE_FORMAT = (TYPE = 'csv' FIELD_DELIMITER = '|' SKIP_HEADER = 1);
    
    Copy

    此命令在前面步骤中创建的数据库和架构中创建命名暂存区。

    备注

    必须包括 FILE_FORMAT = (TYPE = 'CSV' FIELD_DELIMITER = '|' SKIP_HEADER = 1); 作为该命令的一部分。这些不是可选的。

现在,在应用程序包中已经有了一个命名暂存区,可以在其中上传用于构建应用程序的文件。

备注

虽然本教程使用应用程序包中的命名暂存区,但这不是必需的。还可以使用应用程序包之外的数据库和架构中存在的命名暂存区。

将应用程序文件上传至命名暂存区

在上一部分中,创建了一个应用程序包,它将作为应用程序的容器。还在包含所需应用程序文件的应用程序包中创建了一个命名暂存区。

在本部分中,将把这些文件上传到命名暂存区。

要上传应用程序文件,请执行以下操作之一:

  • 使用 Snowsight 上传应用程序文件,如 使用 Snowsight 暂存文件 中所述

  • 通过运行以下命令,使用 SnowSQL 上传应用程序文件:

    PUT file:///<path_to_your_root_folder>/tutorial/manifest.yml @hello_snowflake_package.stage_content.hello_snowflake_stage overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/readme.md @hello_snowflake_package.stage_content.hello_snowflake_stage overwrite=true auto_compress=false;
    
    Copy

    备注

    修改上述示例中的路径以反映项目根文件夹的路径。

在工作表中,运行以下命令验证文件上传是否成功:

LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
Copy

运行此命令后,应该看到列出的每个文件,如以下输出所示:

+----------------------------------------+------+----------------------------------+-------------------------------+
| name                                   | size | md5                              | last_modified                 |
|----------------------------------------+------+----------------------------------+-------------------------------|
| hello_snowflake_stage/manifest.yml      |   80 | 9acab2ba718eebfa5f98f4e95c822db6 | Mon, 29 May 2023 22:51:04 GMT |
| hello_snowflake_stage/readme.md         |   64 | 1bc95f95109dc60a09b478dd95c31808 | Mon, 29 May 2023 22:51:05 GMT |
| hello_snowflake_stage/scripts/setup.sql |   64 | 7807ee1f2f27312799fc83c66ba775cf | Mon, 29 May 2023 22:51:04 GMT |
+----------------------------------------+------+----------------------------------+-------------------------------+
Copy

在本部分中,已将应用程序文件上传到命名暂存区。当继续开发应用程序时,这些文件现在可供应用程序包使用。在后面的部分中,当向应用程序添加功能时,将返回此部分来上传这些文件的修订版本和新文件。

添加应用程序逻辑并安装第一个应用程序

在本部分中,将添加代码并安装第一个应用程序。为此,将执行以下任务:

  • 在安装脚本中添加存储过程。

  • 向应用程序添加版本。

  • 安装并测试应用程序。

向安装脚本添加存储过程

在上一部分中,创建了一个应用程序包。但是,应用程序包尚不包含任何数据内容或应用程序文件。

在本部分中,将通过将存储过程的代码添加到本地文件系统上的安装脚本,来向应用程序添加存储过程。

要将存储过程添加到安装脚本,请执行以下操作:

  1. 在前面一部分中创建的 setup.sql 文件的末尾添加以下 SQL 语句:

    CREATE APPLICATION ROLE app_public;
    CREATE SCHEMA IF NOT EXISTS core;
    GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
    
    Copy

    当安装脚本在安装过程中运行时,这些语句会创建一个名为 app_public 的应用程序角色。应用程序角色与数据库角色类似,但只能在应用程序上下文中使用。它们用于授予对应用程序内对象的访问权限。

    此示例还创建了一个包含存储过程的架构,并将该架构的 USAGE 权限授予应用程序角色。创建应用程序角色并向应用程序角色授予对象(例如架构)的权限是安装脚本中的常见模式。

  2. setup.sql 文件的末尾添加存储过程的代码:

    CREATE OR REPLACE PROCEDURE CORE.HELLO()
      RETURNS STRING
      LANGUAGE SQL
      EXECUTE AS OWNER
      AS
      BEGIN
        RETURN 'Hello Snowflake!';
      END;
    
    Copy

    此示例创建一个输出字符串“Hello Snowflake!”的存储过程。

  3. 将以下语句添加到 setup.sql 文件的末尾:

    GRANT USAGE ON PROCEDURE core.hello() TO APPLICATION ROLE app_public;
    
    Copy

    此示例将对存储过程的 USAGE 权限授予应用程序角色。

  4. 将修改后的安装脚本上传至命名暂存区。

    请参阅上一部分 将应用程序文件上传至命名暂存区,以上传修改后的安装脚本,然后返回此处继续本教程。

在本部分中,向安装脚本添加了一个存储过程。还创建了一个应用程序角色,并向该角色授予了 USAGE 权限。这允许安装脚本在创建应用程序时创建存储过程。它还授予应用程序运行存储过程的权限。

安装应用程序

在上一部分中,修改了安装脚本以包含存储过程。

在本部分中,将使用 Snowsight 安装应用程序并运行存储过程。

要安装应用程序,请执行以下操作:

  1. 要创建应用程序,请运行以下命令:

    CREATE APPLICATION HELLO_SNOWFLAKE_APP
      FROM APPLICATION PACKAGE HELLO_SNOWFLAKE_PACKAGE
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy
  2. 要验证应用程序是否已成功创建,请运行以下命令:

    SHOW APPLICATIONS;
    
    Copy

    应该会看到 HELLO_SNOWFLAKE_APP 列在输出的 name 列下。

  3. 要运行在上一部分中添加到 setup.sqlHELLO 存储过程,请运行以下命令:

    CALL core.hello();
    
    Copy

    运行此命令后应该看到以下输出:

    +------------------+
    | HELLO            |
    |------------------|
    | HELLO SNOWFLAKE! |
    +------------------+
    
    Copy

回顾本部分所学内容

恭喜!您已经使用 Native Apps Framework 创建、安装并测试了第一个应用程序!尽管该应用程序仅具有基本功能,但用于构建应用程序的组件与更复杂的应用程序相同。

在本部分中,完成了以下操作:

  • 在安装脚本中添加了存储过程。安装脚本指定了应用程序如何安装在使用者账户中。在后面的部分中,将向应用程序添加数据内容和其他类型的应用程序逻辑。

  • 通过运行存储过程安装并测试应用程序。在后面的部分中,将了解查看和测试应用程序的其他方法。

将数据内容添加到应用程序

在上一部分中,创建了一个包含存储过程的应用程序,该存储过程演示了如何向应用程序添加应用程序逻辑。

在本部分中,将通过在 HELLO_SNOWFLAKE_PACAKAGE 应用程序包中创建一个数据库并授予与应用程序共享该数据库的权限,在应用程序中包含数据内容。

创建要与应用程序共享的数据库

在本部分中将了解如何与应用程序共享数据内容。具体来说,您将在应用程序包中创建一个表,以便与应用程序共享。

要在应用程序包中创建表并插入示例数据,请执行以下操作:

  1. 要将上下文设置为应用程序包,请运行以下命令:

    USE APPLICATION PACKAGE hello_snowflake_package;
    
    Copy
  2. 要创建表并添加共享数据内容,请运行以下命令:

    CREATE SCHEMA IF NOT EXISTS shared_data;
    CREATE TABLE IF NOT EXISTS accounts (ID INT, NAME VARCHAR, VALUE VARCHAR);
    INSERT INTO accounts VALUES
      (1, 'Nihar', 'Snowflake'),
      (2, 'Frank', 'Snowflake'),
      (3, 'Benoit', 'Snowflake'),
      (4, 'Steven', 'Acme');
    
    Copy
  3. 要验证数据内容是否正确插入表中,请运行以下命令:

    SELECT * FROM accounts;
    
    Copy

    在这个命令的输出中,应该看到名为 IDNAMEVALUE 的三列。还应该看到每行的数据,如以下输出示例所示:

    +----+----------+-----------+
    | ID | NAME     | VALUE     |
    |----+----------+-----------|
    |  1 | Nihar    | Snowflake |
    |  2 | Frank    | Snowflake |
    |  3 | Benoit   | Snowflake |
    |  4 | Steven   | Acme      |
    +----+----------+-----------+
    
    Copy
  4. 要授予 accounts 表使用权,请运行以下命令:

    GRANT USAGE ON SCHEMA shared_data TO SHARE IN APPLICATION PACKAGE hello_snowflake_package;
    GRANT SELECT ON TABLE accounts TO SHARE IN APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    对应用程序包中的对象授予这些权限可使 accounts 表对从应用程序包中安装的所有应用程序可用。

    备注

    必须授予应用程序包中要与应用程序的使用者共享的每个对象的 USAGE 权限。在上面的示例中,在数据库架构上授予了 USAGE 权限。

    您还必须在共享对象内的任何视图或表上授予 SELECT 权限。

添加视图以访问数据内容

在本部分中,将更新安装脚本以添加一个视图,该视图允许应用程序访问在上一子部分中创建的 accounts 表中的数据。

要添加视图来访问数据内容,请执行以下操作:

  1. 要为视图创建架构,请将以下内容添加到安装脚本中:

    CREATE OR ALTER VERSIONED SCHEMA code_schema;
    GRANT USAGE ON SCHEMA code_schema TO APPLICATION ROLE app_public;
    
    Copy

    这些语句创建包含视图的版本化架构,并授予对架构的 USAGE 权限。Native Apps Framework 使用版本化架构来处理不同版本的存储过程和函数。

  2. 要创建视图,请将以下内容添加到安装脚本中:

    CREATE VIEW IF NOT EXISTS code_schema.accounts_view
      AS SELECT ID, NAME, VALUE
      FROM shared_data.accounts;
    GRANT SELECT ON VIEW code_schema.accounts_view TO APPLICATION ROLE app_public;
    
    Copy

    这些语句在 code_schema 架构中创建视图,并将视图所需的权限授予应用程序角色。

  3. 将修改后的安装脚本上传至命名暂存区。

    请参阅上一部分 将应用程序文件上传至命名暂存区,以上传在本部分中更新的文件,然后返回此处继续本教程。

测试更新后的应用程序

在本子部分中,将重新安装该应用程序并使用已安装应用程序中的视图查询示例表。

要测试更新的应用程序,请执行以下操作:

  1. 要删除现有应用程序,请运行以下命令:

    DROP APPLICATION hello_snowflake_app;
    
    Copy
  2. 要创建应用程序的新版本,请运行以下命令:

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy
  3. 要验证视图是否正常运行,请运行以下命令:

    SELECT * FROM code_schema.accounts_view;
    
    Copy

    该命令的输出与设置示例数据时运行的 SELECT 命令相同:

    +----+----------+-----------+
    | ID | NAME     | VALUE     |
    |----+----------+-----------|
    |  1 | Nihar    | Snowflake |
    |  2 | Frank    | Snowflake |
    |  3 | Benoit   | Snowflake |
    |  4 | Steven   | Acme      |
    +----+----------+-----------+
    
    Copy

回顾本部分所学内容

在本部分中,学习了如何通过执行以下任务在应用程序中包含共享数据内容:

  • 在应用程序包中创建 shared_data 架构和 accounts 表,并将数据插入表中。

  • 授予应用程序包对 accounts 表的引用使用权。

  • 创建引用应用程序包中 accounts 表的架构和视图。

  • 授予应用程序角色对视图的选择权限。

还更新了安装脚本,以在安装应用程序时执行以下操作:

  • 创建应用程序用于访问示例数据的架构和视图。

  • 授予应用程序角色对该架构的使用权。

  • 授予应用程序角色对视图的选择权限。

将 Python 代码添加到应用程序

在本部分中,将通过添加 Python 代码来增强应用程序逻辑,从而扩展应用程序的功能。在本部分中,将包含以下 Python 代码:

  • 内联 Python UDF,是安装脚本中的独立函数。

  • 在安装脚本之外引用 Python 文件的 Python UDF。

备注

尽管本部分介绍了使用 Python 的例子,但是同样的技术也适用于 Java 和 JavaScript。

将内联 Python 函数添加为用户定义的函数 (UDF)

在本部分中,将添加 Python 函数作为 UDF。

要在应用程序中包含 Python UDF,请将以下代码添加到安装文件中。

CREATE OR REPLACE FUNCTION code_schema.addone(i int)
RETURNS INT
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
HANDLER = 'addone_py'
AS
$$
def addone_py(i):
  return i+1
$$;

GRANT USAGE ON FUNCTION code_schema.addone(int) TO APPLICATION ROLE app_public;
Copy

安装应用程序时,这些命令执行以下任务:

  • 创建名为 code_schema 的版本化架构。

  • 将架构使用权限授予 APP_PUBLIC 应用程序角色。

  • code_schema 架构中创建 ADDONE() UDF。

  • 将函数使用权限授予 APP_PUBLIC 应用程序角色。

请注意,上面的代码示例中创建的架构是版本化架构。用户定义函数和存储过程必须在版本化架构而不是普通架构中定义。

添加外部 Python 模块

要向应用程序添加外部 Python 模块,请执行以下操作:

  1. 将以下 Python 函数添加到安装脚本:

    CREATE or REPLACE FUNCTION code_schema.multiply(num1 float, num2 float)
      RETURNS float
      LANGUAGE PYTHON
      RUNTIME_VERSION=3.8
      IMPORTS = ('/python/hello_python.py')
      HANDLER='hello_python.multiply';
    
    GRANT USAGE ON FUNCTION code_schema.multiply(FLOAT, FLOAT) TO APPLICATION ROLE app_public;
    
    Copy

    与前面的示例类似,这些语句在架构中创建一个 Python UDF,并将函数的权限授予应用程序角色。但是,此示例包含一个 IMPORTS 子句,该子句引用了将创建的外部 Python 文件。

  2. tutorial 文件夹中,创建名为 python 的子文件夹。

  3. python 子文件夹中,创建名为 hello_python.py 的文件。

  4. 将以下内容添加到 hello_python.py 文件中:

    def multiply(num1, num2):
      return num1*num2
    
    Copy

    该外部文件中定义的函数与安装脚本中定义的内联函数匹配。

在本部分中,向应用程序添加了一个 Python UDF。这个 UDF 指的是一个外部 Python 模块,可以被应用程序包引用。

安装并测试更新的应用程序

  1. 将新的和修订过的文件上传至命名暂存区。

    请参阅 将应用程序文件上传至命名暂存区 部分,以上传外部 Python 文件,然后返回此处继续本教程。

    如果使用 SnowSQL 上传文件,请运行以下命令:

    PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/python/hello_python.py @hello_snowflake_package.stage_content.hello_snowflake_stage/python overwrite=true auto_compress=false;
    
    Copy
  2. 要移除现有应用程序,请运行以下命令:

    DROP APPLICATION hello_snowflake_app;
    
    Copy
  3. 要创建应用程序的新版本,请运行以下命令:

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy
  4. 要测试 Python 存储过程,请运行以下命令:

    SELECT code_schema.addone(1);
    
    Copy
  5. 要测试引用的 Python 函数,请运行以下命令:

    SELECT code_schema.multiply(1,2);
    
    Copy

回顾本部分所学内容

在本部分中,向应用程序添加了以下新功能:

  • 定义为内联 UDF 的 Python 函数。

  • 定义为引用外部代码的 UDF 的 Python 函数。

还通过安装应用程序的更新版本并运行每个函数来测试每个示例。

将 Streamlit 应用程序添加到应用程序

在本部分中,将通过添加 Streamlit 应用程序来完成应用程序。Streamlit 是一个用于开发数据科学和机器学习应用程序的开源 Python 框架。可以在 Native App 中包含 Streamlit 应用程序以添加用户交互和数据可视化。

创建 Streamlit 应用程序

要创建 Streamlit 应用程序,请执行以下操作:

  1. tutorial 文件夹中,创建名为 streamlit 的子文件夹。

  2. streamlit 文件夹中,创建名为 hello_snowflake.py 的文件。

  3. 在此文件中添加以下代码:

    # Import python packages
    import streamlit as st
    from snowflake.snowpark.context import get_active_session
    
    # Write directly to the app
    st.title("Hello Snowflake - Streamlit Edition")
    st.write(
       """The following data is from the accounts table in the application package.
          However, the Streamlit app queries this data from a view called
          code_schema.accounts_view.
       """
    )
    
    # Get the current credentials
    session = get_active_session()
    
    #  Create an example data frame
    data_frame = session.sql("SELECT * FROM code_schema.accounts_view;")
    
    # Execute the query and convert it into a Pandas data frame
    queried_data = data_frame.to_pandas()
    
    # Display the Pandas data frame as a Streamlit data frame.
    st.dataframe(queried_data, use_container_width=True)
    
    Copy

将 Streamlit 对象添加到安装脚本

要在应用程序中创建 Streamlit 对象,请执行以下操作:

  1. setup.sql 文件的末尾添加以下语句以创建 Streamlit 对象:

    CREATE STREAMLIT code_schema.hello_snowflake_streamlit
      FROM '/streamlit'
      MAIN_FILE = '/hello_snowflake.py'
    ;
    
    Copy

    该语句在核心架构中创建一个 STREAMLIT 对象。

  2. setup.sql 文件的末尾添加以下语句,以允许 APP_PUBLIC 角色访问 Streamlit 对象:

    GRANT USAGE ON STREAMLIT code_schema.hello_snowflake_streamlit TO APPLICATION ROLE app_public;
    
    Copy
  3. 将新的和更新的应用程序文件上传到命名暂存区:

    请参阅上一部分 将应用程序文件上传至命名暂存区,以上传刚刚创建的 Streamlit 文件,然后返回此处继续本教程。

    如果使用 SnowSQL 上传文件,请运行以下命令:

    PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/streamlit/hello_snowflake.py @hello_snowflake_package.stage_content.hello_snowflake_stage/streamlit overwrite=true auto_compress=false;
    
    Copy

安装更新的应用程序

  1. 将修改后的安装脚本上传至命名暂存区。

    请参阅上一部分 将应用程序文件上传至命名暂存区,以上传修改后的安装脚本,然后返回此处继续本教程。

  2. 要移除以前的应用程序,请运行以下命令:

    DROP APPLICATION hello_snowflake_app;
    
    Copy
  3. 要创建应用程序的新版本,请运行以下命令:

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy

回顾本部分所学内容

在本部分中,通过执行以下操作将 Streamlit 应用程序添加到应用程序中:

  • 创建一个 Streamlit 应用程序。

向应用程序添加版本

在本部分中,将向应用程序添加一个版本,其中包含在本教程中添加的所有功能。为此,将使用 ALTER APPLICATION PACKAGE 命令更新之前创建的应用程序包。

要向应用程序添加版本,请执行以下操作:

  1. 要向 HELLO_SNOWFLAKE_PACKAGE 应用程序包添加版本,请运行以下命令:

    ALTER APPLICATION PACKAGE hello_snowflake_package
      ADD VERSION v1_0 USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy

    在此命令中,修改了应用程序包,以根据在前面的部分中上传到命名暂存区的应用程序文件添加版本。

    备注

    为 VERSION 指定的值是一个标签,而不是数值或字符串。有关更多信息,请参阅 ALTER APPLICATION PACKAGE

    备注

    添加的新版本的补丁编号会自动从 0 开始创建。当为某个版本添加其他补丁时,这些补丁会自动增加。但是,当创建新版本(例如 V1_1)时,该版本的补丁编号将重置为 0

  2. 要验证版本是否已添加到应用程序包中,请运行以下命令:

    SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    此命令显示有关版本的其他信息,如以下输出所示:

    +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
    | version | patch | label | comment | created_on                    | dropped_on | log_level | trace_level | state | review_status |
    |---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------|
    | V1_0    |     0 | NULL  | NULL    | 2023-05-30 10:33:39.768 -0700 | NULL       | OFF       | OFF         | READY | NOT_REVIEWED  |
    +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
    
    Copy

    有关更多信息,请参阅 SHOW VERSIONS

  3. 要根据版本安装应用程序,请运行以下命令:

    DROP APPLICATION hello_snowflake_app;
    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING VERSION V1_0;
    
    Copy

在本部分中,修改了应用程序包以包含应用程序的版本。

在 Snowsight 中查看应用程序

在本部分中,将在 Snowsight 中查看应用程序。在前面的部分中,使用了 SQL 语句来测试或查找关于应用程序的信息。不过,也可以在 Snowsight 中查看有关应用程序的信息。还可以查看已部署的 Streamlit 应用程序。

要在 Snowsight 中查看应用程序,请执行以下操作:

  1. 登录 Snowsight。

  2. 切换到 ACCOUNTADMIN 角色

  3. 选择 Data Products » Apps

  4. 选择 HELLO_SNOWFLAKE_APP

    Read Me 选项卡显示在前面部分添加到 readme.md 文件中的内容。

  5. 要查看 Streamlit 应用程序,请选择 HELLO_SNOWFLAKE_STREAMLIT

    ACCOUNTS_VIEW 视图的内容显示在 Streamlit DataFrame 中。

  6. 选择 Projects » Worksheets,以在 Snowflake 工作表中打开应用程序。

  7. 选择 HELLO_SNOWFLAKE_APP,然后从列表中选择一个架构。

    架构列表与在本教程中添加到应用程序的架构相对应。

要从 Snowflake 工作表测试应用程序,请运行以下命令。

LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
CALL core.hello();
SELECT * FROM code_schema.accounts_view;
SELECT code_schema.addone(10);
SELECT code_schema.multiply(2,3);
Copy

备注

当在 Snowsight 中导航到不同页面时,添加到此工作表中的任何 SQL 语句都将丢失。

发布并安装应用程序

在本部分中,将通过创建使用应用程序包作为数据内容的专用列表来发布应用程序。创建列表后,将登录另一个账户来安装该列表。

设置默认发布指令

在为应用程序包创建列表之前,必须设置一个默认发布指令。默认发布指令指定了应用程序的哪个版本可供使用者使用。

在本教程中,将使用上一部分中添加的版本设置默认发布指令。

要为应用程序包设置默认发布指令,请执行以下操作:

  1. 要查看应用程序包定义的版本和补丁,请运行以下命令:

    SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    此命令显示为应用程序包定义的版本和补丁。

  2. 要将默认发布指令设置为版本 v1_0 和补丁 0,请运行以下命令:

    ALTER APPLICATION PACKAGE hello_snowflake_package
      SET DEFAULT RELEASE DIRECTIVE
      VERSION = v1_0
      PATCH = 0;
    
    Copy

    此命令的输出如以下示例所示:

    +-----------------------------------------------------------+
    | status                                                    |
    |-----------------------------------------------------------|
    | Default release directive set to version 'V1_0', patch 0. |
    +-----------------------------------------------------------+
    
    Copy

在本部分中,验证了应用程序包中存在哪些版本和补丁。使用这些信息,为应用程序包定义了默认发布指令。

为应用程序创建列表

现在已经为应用程序包指定了发布指令,将创建一个列表并将应用程序包添加为列表的数据内容。这样就可以与其他 Snowflake 用户共享应用程序,并允许他们在其账户中安装和使用该应用程序。

要为应用程序创建列表,请执行以下操作:

  1. 登录 Snowsight。

  2. 在导航菜单中,选择 Data Products » Provider Studio

  3. 选择 + Listing。创建列表窗口打开。

  4. 输入列表名称。

  5. In the Who can discover the listing 部分,选择 Only specified consumers,以便与特定账户私下共享列表。

  6. 点击 + Select,为列表选择应用程序包。

  7. 输入列表的描述。

  8. Add consumer accounts 部分,为用于测试从列表安装应用程序的使用者体验的账户添加账户标识符。

在本部分中,创建了一个专用列表,其中包含作为共享数据内容的应用程序包。

安装应用程序

在本部分中,将安装与在上一部分中创建的列表相关联的应用程序。将在不同的账户中安装列表,这将模仿使用者在其账户中安装应用程序的方式。

要从列表中安装应用程序,请执行以下操作:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Data Products » Apps

  3. Recently shared with you 下,选择列表的磁贴。

  4. 选择 Get

  5. 输入应用程序面向客户的名称。对于本教程,使用“Hello Snowflake App”。

  6. 选择要安装应用程序的仓库。

  7. 选择 Get

  8. 选择 Open 查看列表或选择 Done 结束。

在本部分中,学习了如何发布和安装列表,以便与其他 Snowflake 用户共享应用程序。

了解详情

恭喜!您不仅完成了本教程,而且还完成了使用 Native Apps Framework 的应用程序开发和发布生命周期。

在此过程中,您执行了以下操作:

语言: 中文