教程:使用 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 文件。
在本教程中,将了解有关这两个文件及其内容的更多信息。还将创建自述文件,在本教程的后面部分查看和发布应用程序时,该文件会很有用。
创建安装脚本¶
要创建安装脚本,请执行以下操作:
在本地文件系统上创建名为
tutorial
的文件夹。这将是应用程序外部文件的根目录。备注
将在后面的部分中向此文件夹添加其他文件和子文件夹。
在
tutorial
文件夹中,创建名为scripts
的子文件夹。在此文件夹中,创建名为
setup.sql
的新文件。备注
本教程将引用此结构和文件名作为安装脚本。但是,在构建自己的应用程序时,可以为此文件选择自己的名称和目录结构。
将以下 SQL 语句添加到此文件中:
-- Setup script for the Hello Snowflake! application.
由于安装脚本不能为空,因此要添加此行作为占位符。
为应用程序创建 README 文件¶
自述文件提供应用程序功能的描述。在 Snowsight 中查看应用程序时,将看到自述文件。
为应用程序创建 readme.md 文件:
在
tutorial
文件夹中,创建名为readme.md
的文件。在此文件中添加以下内容:
This is the readme file for the Hello Snowflake Application!
创建清单文件¶
Native Apps Framework 要求每个应用程序都有清单文件。清单文件包含应用程序的元数据和配置参数。
要创建清单文件,请执行以下操作:
在
tutorial
文件夹中,创建名为manifest.yml
的文件。备注
此文件必须命名为
manifest.yml
,并且必须位于项目的根级别。其他文件的路径(包括安装脚本)与此文件的位置相关。在此文件中添加以下内容:
manifest_version: 1 artifacts: setup_script: scripts/setup.sql readme: readme.md
setup_script
属性指定安装脚本相对于清单文件位置的位置。此处指定的路径和文件名必须与上面创建的安装脚本的位置相同。备注
manifest_version
、artifacts
和setup_script
属性是必需的。readme
属性是可选的。
回顾本部分所学内容¶
执行完本部分中的步骤后,现在应该拥有如下所示的目录结构:
/tutorial
manifest.yml
readme.md
/scripts/
setup.sql
在本部分中,学习了如何创建 Native Apps Framework 所需的安装脚本和清单文件。虽然添加到这两个文件中的内容都是基本的,但所有应用程序都必须具有这些文件。
还添加了自述文件,在 Snowsight 中查看应用程序或以列表形式发布应用程序时会显示该文件。
创建应用程序包¶
在本部分中,将创建应用程序包,该包将作为应用程序所需资源的容器。您将执行以下任务:
创建应用程序包。
在应用程序包内创建命名暂存区。
创建应用程序包¶
从本质上讲,应用程序包是一个 Snowflake 数据库,可以扩展以包含有关应用程序的附加信息。从这个意义上来说,它是一个应用程序的容器,其中包括:
共享数据内容
应用程序文件
要创建应用程序包,请执行以下操作:
要向角色授予 CREATE APPLICATION PACKAGE 权限,请运行以下命令:
GRANT CREATE APPLICATION PACKAGE ON ACCOUNT TO ROLE accountadmin;
备注
虽然 ACCOUNTADMIN 角色默认具有此权限,但为了能够创建应用程序包,必须确保角色已被授予此权限。
要创建应用程序包,请运行以下命令:
CREATE APPLICATION PACKAGE hello_snowflake_package;
备注
运行此命令后,当前上下文更改为 HELLO_SNOWFLAKE_PACKAGE。
要验证应用程序包是否已成功创建,请运行以下命令:
SHOW APPLICATION PACKAGES;
应该会在输出的
name
列中看到HELLO_SNOWFLAKE_PACKAGE
。有关此命令的更多信息,请参阅 SHOW APPLICATION PACKAGES。
在本部分中,了解到应用程序包是应用程序使用的资源的容器。还学习了如何创建应用程序包。
创建命名暂存区¶
在本部分中,将创建一个命名暂存区来存储 Native Apps Framework 所需的文件。还需要一个命名暂存区来存储要包含在应用程序中的任何外部代码文件。将这些文件上传到命名暂存区可使其在创建应用程序时可用。
要创建命名暂存区,请执行以下操作:
要将上下文设置为在上一部分中创建的应用程序包,请运行以下命令:
USE APPLICATION PACKAGE hello_snowflake_package;
要为命名暂存区创建所需的架构,请运行以下命令:
CREATE SCHEMA stage_content;
要创建命名暂存区,请运行以下命令。
CREATE OR REPLACE STAGE hello_snowflake_package.stage_content.hello_snowflake_stage FILE_FORMAT = (TYPE = 'csv' FIELD_DELIMITER = '|' SKIP_HEADER = 1);
此命令在前面步骤中创建的数据库和架构中创建命名暂存区。
备注
必须包括
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;
备注
修改上述示例中的路径以反映项目根文件夹的路径。
在工作表中,运行以下命令验证文件上传是否成功:
LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
运行此命令后,应该看到列出的每个文件,如以下输出所示:
+----------------------------------------+------+----------------------------------+-------------------------------+
| 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 |
+----------------------------------------+------+----------------------------------+-------------------------------+
在本部分中,已将应用程序文件上传到命名暂存区。当继续开发应用程序时,这些文件现在可供应用程序包使用。在后面的部分中,当向应用程序添加功能时,将返回此部分来上传这些文件的修订版本和新文件。
添加应用程序逻辑并安装第一个应用程序¶
在本部分中,将添加代码并安装第一个应用程序。为此,将执行以下任务:
在安装脚本中添加存储过程。
向应用程序添加版本。
安装并测试应用程序。
向安装脚本添加存储过程¶
在上一部分中,创建了一个应用程序包。但是,应用程序包尚不包含任何数据内容或应用程序文件。
在本部分中,将通过将存储过程的代码添加到本地文件系统上的安装脚本,来向应用程序添加存储过程。
要将存储过程添加到安装脚本,请执行以下操作:
在前面一部分中创建的
setup.sql
文件的末尾添加以下 SQL 语句:CREATE APPLICATION ROLE app_public; CREATE SCHEMA IF NOT EXISTS core; GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
当安装脚本在安装过程中运行时,这些语句会创建一个名为
app_public
的应用程序角色。应用程序角色与数据库角色类似,但只能在应用程序上下文中使用。它们用于授予对应用程序内对象的访问权限。此示例还创建了一个包含存储过程的架构,并将该架构的 USAGE 权限授予应用程序角色。创建应用程序角色并向应用程序角色授予对象(例如架构)的权限是安装脚本中的常见模式。
在
setup.sql
文件的末尾添加存储过程的代码:CREATE OR REPLACE PROCEDURE CORE.HELLO() RETURNS STRING LANGUAGE SQL EXECUTE AS OWNER AS BEGIN RETURN 'Hello Snowflake!'; END;
此示例创建一个输出字符串“Hello Snowflake!”的存储过程。
将以下语句添加到
setup.sql
文件的末尾:GRANT USAGE ON PROCEDURE core.hello() TO APPLICATION ROLE app_public;
此示例将对存储过程的 USAGE 权限授予应用程序角色。
将修改后的安装脚本上传至命名暂存区。
请参阅上一部分 将应用程序文件上传至命名暂存区,以上传修改后的安装脚本,然后返回此处继续本教程。
在本部分中,向安装脚本添加了一个存储过程。还创建了一个应用程序角色,并向该角色授予了 USAGE 权限。这允许安装脚本在创建应用程序时创建存储过程。它还授予应用程序运行存储过程的权限。
安装应用程序¶
在上一部分中,修改了安装脚本以包含存储过程。
在本部分中,将使用 Snowsight 安装应用程序并运行存储过程。
要安装应用程序,请执行以下操作:
要创建应用程序,请运行以下命令:
CREATE APPLICATION HELLO_SNOWFLAKE_APP FROM APPLICATION PACKAGE HELLO_SNOWFLAKE_PACKAGE USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
要验证应用程序是否已成功创建,请运行以下命令:
SHOW APPLICATIONS;
应该会看到
HELLO_SNOWFLAKE_APP
列在输出的name
列下。要运行在上一部分中添加到
setup.sql
的HELLO
存储过程,请运行以下命令:CALL core.hello();
运行此命令后应该看到以下输出:
+------------------+ | HELLO | |------------------| | HELLO SNOWFLAKE! | +------------------+
回顾本部分所学内容¶
恭喜!您已经使用 Native Apps Framework 创建、安装并测试了第一个应用程序!尽管该应用程序仅具有基本功能,但用于构建应用程序的组件与更复杂的应用程序相同。
在本部分中,完成了以下操作:
在安装脚本中添加了存储过程。安装脚本指定了应用程序如何安装在使用者账户中。在后面的部分中,将向应用程序添加数据内容和其他类型的应用程序逻辑。
通过运行存储过程安装并测试应用程序。在后面的部分中,将了解查看和测试应用程序的其他方法。
将数据内容添加到应用程序¶
在上一部分中,创建了一个包含存储过程的应用程序,该存储过程演示了如何向应用程序添加应用程序逻辑。
在本部分中,将通过在 HELLO_SNOWFLAKE_PACAKAGE
应用程序包中创建一个数据库并授予与应用程序共享该数据库的权限,在应用程序中包含数据内容。
添加视图以访问数据内容¶
在本部分中,将更新安装脚本以添加一个视图,该视图允许应用程序访问在上一子部分中创建的 accounts
表中的数据。
要添加视图来访问数据内容,请执行以下操作:
要为视图创建架构,请将以下内容添加到安装脚本中:
CREATE OR ALTER VERSIONED SCHEMA code_schema; GRANT USAGE ON SCHEMA code_schema TO APPLICATION ROLE app_public;
这些语句创建包含视图的版本化架构,并授予对架构的 USAGE 权限。Native Apps Framework 使用版本化架构来处理不同版本的存储过程和函数。
要创建视图,请将以下内容添加到安装脚本中:
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;
这些语句在
code_schema
架构中创建视图,并将视图所需的权限授予应用程序角色。将修改后的安装脚本上传至命名暂存区。
请参阅上一部分 将应用程序文件上传至命名暂存区,以上传在本部分中更新的文件,然后返回此处继续本教程。
测试更新后的应用程序¶
在本子部分中,将重新安装该应用程序并使用已安装应用程序中的视图查询示例表。
要测试更新的应用程序,请执行以下操作:
要删除现有应用程序,请运行以下命令:
DROP APPLICATION hello_snowflake_app;
要创建应用程序的新版本,请运行以下命令:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
要验证视图是否正常运行,请运行以下命令:
SELECT * FROM code_schema.accounts_view;
该命令的输出与设置示例数据时运行的 SELECT 命令相同:
+----+----------+-----------+ | ID | NAME | VALUE | |----+----------+-----------| | 1 | Nihar | Snowflake | | 2 | Frank | Snowflake | | 3 | Benoit | Snowflake | | 4 | Steven | Acme | +----+----------+-----------+
回顾本部分所学内容¶
在本部分中,学习了如何通过执行以下任务在应用程序中包含共享数据内容:
在应用程序包中创建
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;
安装应用程序时,这些命令执行以下任务:
创建名为
code_schema
的版本化架构。将架构使用权限授予
APP_PUBLIC
应用程序角色。在
code_schema
架构中创建ADDONE()
UDF。将函数使用权限授予
APP_PUBLIC
应用程序角色。
请注意,上面的代码示例中创建的架构是版本化架构。用户定义函数和存储过程必须在版本化架构而不是普通架构中定义。
添加外部 Python 模块¶
要向应用程序添加外部 Python 模块,请执行以下操作:
将以下 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;
与前面的示例类似,这些语句在架构中创建一个 Python UDF,并将函数的权限授予应用程序角色。但是,此示例包含一个 IMPORTS 子句,该子句引用了将创建的外部 Python 文件。
在
tutorial
文件夹中,创建名为python
的子文件夹。在
python
子文件夹中,创建名为hello_python.py
的文件。将以下内容添加到
hello_python.py
文件中:def multiply(num1, num2): return num1*num2
该外部文件中定义的函数与安装脚本中定义的内联函数匹配。
在本部分中,向应用程序添加了一个 Python UDF。这个 UDF 指的是一个外部 Python 模块,可以被应用程序包引用。
安装并测试更新的应用程序¶
将新的和修订过的文件上传至命名暂存区。
请参阅 将应用程序文件上传至命名暂存区 部分,以上传外部 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;
要移除现有应用程序,请运行以下命令:
DROP APPLICATION hello_snowflake_app;
要创建应用程序的新版本,请运行以下命令:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
要测试 Python 存储过程,请运行以下命令:
SELECT code_schema.addone(1);
要测试引用的 Python 函数,请运行以下命令:
SELECT code_schema.multiply(1,2);
回顾本部分所学内容¶
在本部分中,向应用程序添加了以下新功能:
定义为内联 UDF 的 Python 函数。
定义为引用外部代码的 UDF 的 Python 函数。
还通过安装应用程序的更新版本并运行每个函数来测试每个示例。
将 Streamlit 应用程序添加到应用程序¶
在本部分中,将通过添加 Streamlit 应用程序来完成应用程序。Streamlit 是一个用于开发数据科学和机器学习应用程序的开源 Python 框架。可以在 Native App 中包含 Streamlit 应用程序以添加用户交互和数据可视化。
创建 Streamlit 应用程序¶
要创建 Streamlit 应用程序,请执行以下操作:
在
tutorial
文件夹中,创建名为streamlit
的子文件夹。在
streamlit
文件夹中,创建名为hello_snowflake.py
的文件。在此文件中添加以下代码:
# 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)
将 Streamlit 对象添加到安装脚本¶
要在应用程序中创建 Streamlit 对象,请执行以下操作:
在
setup.sql
文件的末尾添加以下语句以创建 Streamlit 对象:CREATE STREAMLIT code_schema.hello_snowflake_streamlit FROM '/streamlit' MAIN_FILE = '/hello_snowflake.py' ;
该语句在核心架构中创建一个 STREAMLIT 对象。
在
setup.sql
文件的末尾添加以下语句,以允许 APP_PUBLIC 角色访问 Streamlit 对象:GRANT USAGE ON STREAMLIT code_schema.hello_snowflake_streamlit TO APPLICATION ROLE app_public;
将新的和更新的应用程序文件上传到命名暂存区:
请参阅上一部分 将应用程序文件上传至命名暂存区,以上传刚刚创建的 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;
安装更新的应用程序¶
将修改后的安装脚本上传至命名暂存区。
请参阅上一部分 将应用程序文件上传至命名暂存区,以上传修改后的安装脚本,然后返回此处继续本教程。
要移除以前的应用程序,请运行以下命令:
DROP APPLICATION hello_snowflake_app;
要创建应用程序的新版本,请运行以下命令:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
回顾本部分所学内容¶
在本部分中,通过执行以下操作将 Streamlit 应用程序添加到应用程序中:
创建一个 Streamlit 应用程序。
向应用程序添加版本¶
在本部分中,将向应用程序添加一个版本,其中包含在本教程中添加的所有功能。为此,将使用 ALTER APPLICATION PACKAGE 命令更新之前创建的应用程序包。
要向应用程序添加版本,请执行以下操作:
要向
HELLO_SNOWFLAKE_PACKAGE
应用程序包添加版本,请运行以下命令:ALTER APPLICATION PACKAGE hello_snowflake_package ADD VERSION v1_0 USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
在此命令中,修改了应用程序包,以根据在前面的部分中上传到命名暂存区的应用程序文件添加版本。
备注
为 VERSION 指定的值是一个标签,而不是数值或字符串。有关更多信息,请参阅 ALTER APPLICATION PACKAGE。
备注
添加的新版本的补丁编号会自动从
0
开始创建。当为某个版本添加其他补丁时,这些补丁会自动增加。但是,当创建新版本(例如V1_1
)时,该版本的补丁编号将重置为0
。要验证版本是否已添加到应用程序包中,请运行以下命令:
SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
此命令显示有关版本的其他信息,如以下输出所示:
+---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+ | 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 | +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
有关更多信息,请参阅 SHOW VERSIONS。
要根据版本安装应用程序,请运行以下命令:
DROP APPLICATION hello_snowflake_app; CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING VERSION V1_0;
在本部分中,修改了应用程序包以包含应用程序的版本。
在 Snowsight 中查看应用程序¶
在本部分中,将在 Snowsight 中查看应用程序。在前面的部分中,使用了 SQL 语句来测试或查找关于应用程序的信息。不过,也可以在 Snowsight 中查看有关应用程序的信息。还可以查看已部署的 Streamlit 应用程序。
要在 Snowsight 中查看应用程序,请执行以下操作:
登录 Snowsight。
选择 Data Products » Apps。
选择
HELLO_SNOWFLAKE_APP
。Read Me
选项卡显示在前面部分添加到readme.md
文件中的内容。要查看 Streamlit 应用程序,请选择 HELLO_SNOWFLAKE_STREAMLIT。
ACCOUNTS_VIEW 视图的内容显示在 Streamlit DataFrame 中。
选择 Projects » Worksheets,以在 Snowflake 工作表中打开应用程序。
选择 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);
备注
当在 Snowsight 中导航到不同页面时,添加到此工作表中的任何 SQL 语句都将丢失。
发布并安装应用程序¶
在本部分中,将通过创建使用应用程序包作为数据内容的专用列表来发布应用程序。创建列表后,将登录另一个账户来安装该列表。
设置默认发布指令¶
在为应用程序包创建列表之前,必须设置一个默认发布指令。默认发布指令指定了应用程序的哪个版本可供使用者使用。
在本教程中,将使用上一部分中添加的版本设置默认发布指令。
要为应用程序包设置默认发布指令,请执行以下操作:
要查看应用程序包定义的版本和补丁,请运行以下命令:
SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
此命令显示为应用程序包定义的版本和补丁。
要将默认发布指令设置为版本
v1_0
和补丁0
,请运行以下命令:ALTER APPLICATION PACKAGE hello_snowflake_package SET DEFAULT RELEASE DIRECTIVE VERSION = v1_0 PATCH = 0;
此命令的输出如以下示例所示:
+-----------------------------------------------------------+ | status | |-----------------------------------------------------------| | Default release directive set to version 'V1_0', patch 0. | +-----------------------------------------------------------+
在本部分中,验证了应用程序包中存在哪些版本和补丁。使用这些信息,为应用程序包定义了默认发布指令。
为应用程序创建列表¶
现在已经为应用程序包指定了发布指令,将创建一个列表并将应用程序包添加为列表的数据内容。这样就可以与其他 Snowflake 用户共享应用程序,并允许他们在其账户中安装和使用该应用程序。
要为应用程序创建列表,请执行以下操作:
登录 Snowsight。
在导航菜单中,选择 Data Products » Provider Studio。
选择 + Listing。创建列表窗口打开。
输入列表名称。
在 In the Who can discover the listing 部分,选择 Only specified consumers,以便与特定账户私下共享列表。
点击 + Select,为列表选择应用程序包。
输入列表的描述。
在 Add consumer accounts 部分,为用于测试从列表安装应用程序的使用者体验的账户添加账户标识符。
在本部分中,创建了一个专用列表,其中包含作为共享数据内容的应用程序包。
安装应用程序¶
在本部分中,将安装与在上一部分中创建的列表相关联的应用程序。将在不同的账户中安装列表,这将模仿使用者在其账户中安装应用程序的方式。
要从列表中安装应用程序,请执行以下操作:
登录 Snowsight。
在导航菜单中,选择 Data Products » Apps。
在 Recently shared with you 下,选择列表的磁贴。
选择 Get。
输入应用程序面向客户的名称。对于本教程,使用“Hello Snowflake App”。
选择要安装应用程序的仓库。
选择 Get。
选择 Open 查看列表或选择 Done 结束。
在本部分中,学习了如何发布和安装列表,以便与其他 Snowflake 用户共享应用程序。
了解详情¶
恭喜!您不仅完成了本教程,而且还完成了使用 Native Apps Framework 的应用程序开发和发布生命周期。
在此过程中,您执行了以下操作:
使用 Snowsight 和 Snowflake 工作表构建了使用 Native Apps Framework 的应用程序。
有关 Snowsight 的更多信息,请参阅 工作表入门 和 在 Snowsight 中管理和使用工作表。
创建了所有应用程序所需的清单和安装脚本。
有关详细信息,请参阅 为应用程序包创建清单文件 和 创建安装脚本。
创建了一个应用程序包,作为应用程序逻辑和数据内容的容器。
有关详细信息,请参阅 创建应用程序包。
使用用 Python 编写的存储过程和 UDFs 向应用程序添加逻辑。
有关在 Native Apps Framework 中使用存储过程、UDFs 和外部函数的信息,请参阅 将应用程序逻辑添加到应用程序包。
有关每种类型的过程和函数的一般信息,请参阅 Snowpark API、使用函数和过程扩展 Snowflake 和 编写外部函数。
向应用程序添加了共享数据内容。
有关更多信息,请参阅 将共享数据内容添加到应用程序包。
在应用程序中包含一个 Streamlit 应用程序。
有关更多信息,请参阅 使用 Streamlit 为应用程序添加前端体验。
在 Snowsight 中查看了应用程序。
请参阅 以使用者身份使用应用程序
为应用程序创建了专用列表,并在单独的账户中安装该应用程序。
有关发布包含应用程序包的列表的信息,请参阅 与使用者共享应用程序。
有关使用者如何通过列表安装应用程序的信息,请参阅 通过列表安装应用程序。