在本地安装和测试应用程序¶
本主题介绍提供商如何在本地创建和测试 Snowflake Native App。
关于创建和测试应用程序¶
通过 Snowflake Native App Framework,提供商可在与应用程序包相同的账户内创建应用程序,从而在向使用者发布应用程序之前对其进行测试。
提供商还可在单个账户中测试应用程序,而无需在提供商和使用者账户之间切换。
创建和测试应用程序时所需的权限¶
要从应用程序包在本地创建应用程序,您的角色必须获授以下权限:
向角色授予的 CREATE APPLICATION 账户级权限。
关于应用程序包的 INSTALL 对象级权限。
以下示例说明如何使用 GRANT <privileges> 命令向账户授予这些权限:
GRANT CREATE APPLICATION ON ACCOUNT TO ROLE provider_role;
GRANT INSTALL ON APPLICATION PACKAGE hello_snowflake_package
TO ROLE provider_role;
使用 DEVELOP 权限¶
默认情况下,用于创建应用程序包的角色有权使用 CREATE APPLICATION 命令,基于应用程序包创建应用程序。
但是,在某些开发环境中,您可能需要允许具有其他角色的用户创建和测试应用程序包。为此,向角色授予应用程序包的 DEVELOP 对象级权限。
DEVELOP 权限会授予基于应用程序包创建和测试应用程序所需的权限。借助此权限,用户能够使用他们拥有访问权限的应用程序包执行以下任务:
基于应用程序包中指定的版本或补丁创建应用程序。
使用 ALTER APPLICATION 命令升级到应用程序的不同版本。
使用命名暂存区中的文件创建或升级应用程序。
为在 开发模式 中创建的应用程序启用调试模式。
要向特定角色授予 DEVELOP 权限,请使用 GRANT <privileges> 命令,如以下示例所示:
GRANT DEVELOP ON APPLICATION PACKAGE hello_snowflake_package TO ROLE other_dev_role;
备注
DEVELOP 对象级权限特定于单个应用程序包。对于每个要为之分配 DEVELOP 权限的应用程序包,必须运行 GRANT <privileges>。
创建和测试应用程序的工作流¶
Snowflake Native App Framework 提供了不同的方式,用于从应用程序包创建应用程序。这样的话,您能够先测试 Snowflake Native App,然后再向使用者发布。所用方法取决于您想要测试应用程序的哪个部分。
以下步骤概述了用于测试应用程序的典型工作流:
创建应用程序。
您可以基于以下内容在本地创建应用程序:
暂存区中的文件
这支持快速测试安装脚本或应用程序代码文件的新版本。有关更多信息,请参阅 使用暂存文件创建应用程序。
应用程序包中定义的版本或补丁
定义应用程序包的版本或补丁后,您可以基于此版本创建应用程序,从而测试此版本。有关更多信息,请参阅 通过版本或补丁创建应用程序。
升级应用程序。
确认应用程序正常工作后,可通过两种方式之一将其升级到新版本:
使用暂存区中的文件
使用应用程序包中定义的版本或补丁
基于发布指令创建应用程序。
使用特定文件、版本或补丁测试应用程序后,可以根据为应用程序包定义的发布指令创建应用程序。使用发布指令时,不需要指定应用程序的暂存区或版本。
有关更多信息,请参阅 使用暂存文件创建应用程序。
从列表中安装应用程序。
在通过测试确定应用程序包和应用程序可在本地账户中正常运行后,即可将应用程序包添加到列表中,并使用 Snowsight 测试安装。
有关更多信息,请参阅 使用暂存文件创建应用程序。
创建应用程序¶
可以直接在自己的账户中安装应用程序,并在与客户共享之前测试其功能和权限。CREATE APPLICATION 命令支持创建应用程序的不同语法。
备注
以下部分假设您已经创建应用程序包以及所需的清单文件和安装脚本。
使用暂存文件创建应用程序¶
您可以使用上传到命名暂存区的清单文件和安装脚本创建应用程序。这样即可测试对这些文件的更改,而无需向应用程序包中添加新版本。
借助 CREATE APPLICATION 命令,使用暂存文件创建应用程序,如以下示例所示:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package
USING '@hello_snowflake_code.core.hello_snowflake_stage';
通过版本或补丁创建应用程序¶
在应用程序包中定义版本或补丁后,即可基于该版本或补丁创建应用程序。
要通过特定版本创建应用程序,请使用 CREATE APPLICATION 命令,如以下示例所示:
CREATE APPLICATION hello_snowflake_app
FROM APPLICATION PACKAGE hello_snowflake_package
USING VERSION v1_0;
要通过特定补丁创建应用程序,请使用 CREATE APPLICATION 命令,如以下示例所示:
CREATE APPLICATION hello_snowflake_app
FROM APPLICATION PACKAGE hello_snowflake_package
USING VERSION v1_0 PATCH 2;
基于发布指令创建应用程序¶
在应用程序包中指定发布指令(自定义或默认)后,可以基于该发布指令创建应用程序。
要基于发布指令创建应用程序,请使用 CREATE APPLICATION 命令,如以下示例所示:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package;
使用暂存区升级应用程序¶
要使用命名暂存区上的文件升级应用程序,请使用 ALTER APPLICATION 命令,如以下示例所示:
ALTER APPLICATION HelloSnowflake
UPGRADE USING @CODEDATABASE.CODESCHEMA.AppCodeStage;
通过版本或补丁升级应用程序¶
要升级使用特定版本或补丁创建的应用程序,请使用 ALTER APPLICATION 命令,如以下示例所示:
ALTER APPLICATION HelloSnowflake
UPGRADE USING VERSION "v1_1";
将应用程序设置为活动上下文¶
要将应用程序设置为会话的活动上下文,请运行 USE APPLICATION 命令,如以下示例所示:
USE APPlICATION hello_snowflake_app;
备注
要运行此命令,您必须向自己的角色授予应用程序的 USAGE 权限。
在账户中查看应用程序¶
要查看账户可用的应用程序列表,请使用 SHOW APPLICATIONS 命令,如以下示例所示:
SHOW APPLICATIONS;
查看应用程序相关信息¶
要查看应用程序详细信息,请运行 DESCRIBE APPLICATION 命令,如以下示例所示:
DESC APPLICATION hello_snowflake_app;
在 :ref:` 开发模式 <label-native_apps_dev_mode>` 下,此命令显示使用者的应用程序角色允许的架构。
在 调试模式 下,此命令显示应用程序包中的所有架构。
使用开发、调试和会话调试模式测试应用程序¶
借助 Snowflake Native App Framework,提供商可使用如下模式创建应用程序并测试其功能:
- 开发模式
提供商可从使用者的角度测试应用程序。这意味着提供商只能访问使用者已获授权的对象。
- 调试模式
提供商可以访问应用程序内的所有对象。在调试模式下,会话的主要作用是修改应用程序中的状态。
- 会话调试模式
提供商可使用其获授的应用程序或安装脚本权限,访问应用程序内的对象。
关于开发模式¶
当您通过 指定版本 或:ref:命名暂存区上的应用程序文件 <label-native_apps_application_creating_stage>
来从应用程序包在本地创建应用程序时,该应用程序被视为处于开发模式。
使用开发模式可在单个账户内测试应用程序并进行故障排除。在开发模式下,您可以根据应用程序包的特定版本,创建并测试应用程序。您还可以使用暂存区上的应用程序文件,创建并测试应用程序。这样的话,您能够快速测试安装脚本或应用程序逻辑的更改。
开发模式提供了一个额外的 调试模式,您可以通过此模式来查看和测试应用程序中使用者无法查看的所有对象。
例如,在开发模式下,对应用程序内的对象运行 SHOW 或者 DESC 命令时,仅显示使用者已获授查看权限的对象。但在 DEBUG 模式下,您可以看到应用程序内的所有对象。
关于调试模式¶
在调试模式下,您可以查看和修改应用程序中的所有对象。在此模式下,使用者看不到的对象(例如,未向数据库角色授予的对象或共享内容对象)变得可见。
备注
在调试模式下创建表等对象时,对象的所有权不同于应用程序的所有权。如果需要在测试应用程序程序时创建新对象,请使用 会话调试模式。
在调试模式下测试应用程序需要满足以下条件:
应用程序必须在开发模式下创建,这意味着它必须基于特定版本或暂存区上的文件。
您必须在应用程序上明确启用调试模式。
备注
仅可为符合以下条件的应用程序启用和关闭调试模式:在包含应用程序包的相同账户内,在开发模式下创建的应用程序。
要为应用程序启用调试模式,请使用 ALTER APPLICATION 命令,如以下示例所示:
ALTER APPLICATION hello_snowflake_app SET DEBUG_MODE = TRUE;
此命令为名为 hello_snowflake_app
的应用程序启用调试模式。同样,要关闭调试模式,请使用以下示例所示的相同命令:
ALTER APPLICATION hello_snowflake_app SET DEBUG_MODE = FALSE;
此命令为名为 hello_snowflake_app
的应用程序关闭调试模式。
备注
要运行此命令,您必须拥有应用程序的 OWNERSHIP 权限。您还必须对应用程序包拥有 DEVELOP 权限。
此外,应用程序必须在开发模式下创建,并且与应用程序包在同一个账户中。
会话调试模式¶
会话调试模式允许提供商查看和修改应用程序中的所有对象,并使用与使用者账户中安装的应用程序相同的权限执行语句。在会话调试模式下,对使用者不可见的对象(例如未授予应用程序角色的对象)也会处于可见状态。
不同于调试模式,会话调试模式仅适用于当前会话,目的在于降低安全风险。每次启动新会话时,必须为应用程序 启用会话调试模式。会话调试模式与调试模式的另一个区别在于,它允许使用与应用程序或安装脚本相同的权限来测试应用程序。要使用这些权限,可在启用会话调试模式时指定以下项之一。有关更多信息,请参阅 为应用程序启用会话调试模式。
AS_APPLICATION
:执行所有语句时所用的权限都与应用程序在使用者账户中创建时的权限相同。AS_SETUP_SCRIPT
:执行所有语句时所用的权限都与创建或升级应用程序时在使用者账户中运行安装脚本时的权限相同。
在提供商使用会话调试模式创建表等对象时,该对象将以与应用程序相同的权限创建。
使用会话调试模式所需的权限¶
使用会话调试模式来查看应用程序中的对象时,需要满足以下要求:
应用程序必须在 开发模式 下创建,这就要求基于特定版本或暂存区上的文件创建应用程序。
应用程序必须与作为该应用程序基础的应用程序包处于同一账户内。
您必须拥有应用程序的 OWNERSHIP 权限。
您还必须拥有应用程序包的 DEVELOP 权限。
备注
会话调试模式只能在已设置调试模式的会话中使用。例如,如果在一个工作表中进入调试模式,然后在第二个工作表中打开应用程序,则第二个工作表中的应用程序不会处于会话调试模式。
为应用程序启用会话调试模式¶
要为当前会话中的应用程序启用会话调试模式,请使用 SYSTEM$BEGIN_DEBUG_APPLICATION 系统函数,如下例所示:
SELECT SYSTEM$BEGIN_DEBUG_APPLICATION(‘hello_snowflake_app’);
此函数为名为 hello_snowflake_app
的应用程序启用会话调试模式。
还可以通过指定应用程序的执行模式来启用会话调试,如下例所示:
SYSTEM$BEGIN_DEBUG_APPLICATION( 'hello_snowflake_app', execution_mode ='AS_APPLICATION')
此函数将 hello_snowflake_app
应用程序的执行模式设置为 AS_APPLICATION
。该模式使用与在使用者账户中创建应用程序时相同的权限执行所有语句。
在当前会话中查看应用程序的会话调试状态¶
要查看当前会话的会话调试状态,请使用 SYSTEM$GET_DEBUG_STATUS 系统函数,如下例所示:
SELECT SYSTEM$GET_DEBUG_STATUS();
为应用程序禁用会话调试模式¶
要在当前会话中为应用程序禁用会话调试模式,请使用 SYSTEM$END_DEBUG_APPLICATION 系统函数,如下例所示:
SELECT SYSTEM$END_DEBUG_APPLICATION();
在测试应用程序时禁用提供商数据编辑功能¶
在应用程序中,查询配置文件和查询历史记录中的信息会被编辑,以向使用者隐藏应用程序的实施细节。请参阅 保护提供商的知识产权。
在本地测试应用程序时,可禁止编辑查询配置文件和查询历史记录中的提供商数据。
备注
使用会话调试模式时,应用程序中的所有对象和数据对提供商均可见,即使这些信息对使用者来说是经过编辑的。例如,在使用会话调试模式时,SHOW APPLICATIONS 和 DESCRIBE APPLICATION 命令返回的信息不会被编辑。
在测试应用程序时禁用提供商数据编辑所需的权限¶
要为应用程序禁用提供商数据编辑功能,需要用到以下权限:
应用程序必须在开发模式下创建,这意味着它必须基于特定版本或暂存区上的文件。
应用程序必须在包含应用程序包的同一个账户内创建。
您必须拥有应用程序的 OWNERSHIP 权限。
您还必须拥有应用程序包的 DEVELOP 权限。
禁用提供商数据的信息编辑功能¶
要为应用程序禁用信息编辑功能,请使用 ALTER APPLICATION 命令,如下例所示:
ALTER APPLICATION hello_snowflake_app SET DISABLE_APPLICATION_REDACTION = TRUE;
此命令会为名为 hello_snowflake_app
的应用程序禁用提供商数据编辑功能。
要启用提供商数据编辑功能,请使用下例中所示的相同命令:
ALTER APPLICATION hello_snowflake_app SET DISABLE_APPLICATION_REDACTION = FALSE;
在开发模式下测试事件共享¶
提供商使用开发模式来安装和测试使用 日志记录和事件跟踪 的应用程序。提供商可以在其开发账户中本地设置事件表,在开发模式下安装应用程序,并查看应用程序发出的事件和日志以及与提供商共享的事件和日志。
备注
要在开发模式下测试事件共享,应用程序必须在 manifest 文件中 定义事件定义。
开发模式的差异¶
在开发模式下,根据以下其中一项创建应用程序:
上传到暂存区的文件。
应用程序包中定义的版本或补丁。
在开发模式下本地测试事件共享时,与从列表创建的应用程序相比,行为会有所不同。
启用事件共享不需要 MANAGE EVENT SHARING 全局权限。
在本地事件表中收集共享事件。在本地事件表中,提供商可以看到一个事件的两个条目:
安装应用程序时,应用程序在使用者端发出的事件。
与提供商共享的事件。
在开发模式下测试事件共享¶
将应用程序配置为 使用日志记录和事件跟踪。
在本地开发账户中 设置事件表。
通过运行以下命令之一在本地创建应用程序:
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING @path_to_staged_files AUTHORIZE_TELEMETRY_EVENT_SHARING = TRUE; CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING VERSION v1_0 PATCH 0 AUTHORIZE_TELEMETRY_EVENT_SHARING = TRUE;