更新和升级 Snowflake Native App¶
Snowflake Native App Framework 使提供商能够更新 Snowflake Native App 以添加新功能、修复错误并进行其他更改。本主题介绍了如何为应用程序包添加版本和补丁。本主题还介绍了如何升级已安装的 Snowflake Native App 实例。
关于版本和补丁¶
在 Snowflake Native App Framework 上下文中,版本和补丁是指以下内容:
- 版本
通常包含对 Snowflake Native App 的重大更新。在应用程序包中定义版本。一个应用程序包一次只能有两个活动版本。要将新版本添加到已定义两个版本的应用程序包,必须先删除其中一个版本。
- 补丁
通常包含对 Snowflake Native App 的较小更新。与版本一样,在应用程序包中定义补丁。尽管应用程序包一次只能包含两个活动版本,但单个版本可以有多个补丁。
备注
单个版本最多可以有 130 个补丁。
当提供商为应用程序包添加新版本时,将自动为新版本分配补丁 0。当提供商将新补丁添加到版本时,他们可以手动指定补丁号。如果未提供补丁号,Snowflake 会自动将补丁版本递增 1。
将版本或补丁添加到应用程序包后,通过基于版本或补丁创建应用程序对象,您可以在本地测试这些更改。有关更多信息,请参阅 从版本或补丁级别创建应用程序对象。
备注
应用程序包中定义的每个版本和补丁都必须有自己的安装脚本和应用程序文件版本。
版本和补丁之间的差异¶
当提供商发布应用程序的新版本时, Snowflake Native App Framework 确保只有应用程序的上一版本处于活动状态。例如,如果提供商发布了应用程序的 V1 和 V2,则 Snowflake Native App Framework 确保在升级到 V3 之前,使用者账户中当前仅安装了 V2。这样可确保安装脚本只需考虑 V2 和 V3 之间的差异。换句话说,安装脚本仅向后兼容最新版本的应用程序。如果提供商对应用程序进行状态更改(例如创建新表或向表中添加列),则版本之间不存在兼容性问题。
相反,当提供商为应用程序版本发布新补丁时, Snowflake Native App Framework 不会对正在运行的活动补丁的数量实施任何限制。提供商必须避免更改补丁中应用程序的状态。
关于发布指令¶
发布指令指定了使用者安装 Snowflake Native App 时使用的版本和补丁(可选)。发布指令还用于在特定版本或补丁的所有已安装实例之间触发 自动升级。
在应用程序包中定义发布指令。有两种类型的发布指令:
- 自定义发布指令
允许提供商指定特定 Snowflake 账户可以安装的应用程序版本。有关更多信息,请参阅 添加自定义发布指令。
- 默认发布指令
指定安装 Snowflake Native App 时适用于所有使用者的版本和补丁。如果提供商创建应用程序的版本 V1 和 V2,则将默认发布指令设置为 V2 可确保使用者在安装 Snowflake Native App 时安装 V2 版本。有关更多信息,请参阅 设置默认发布指令。
如果提供商创建应用程序的版本 V2 和 V3,则可以将 V2 指定为默认版本,并创建自定义发布指令,以便仅与特定账户共享 V3。在发布应用程序 V3 版本之前,提供商还可以与测试账户共享该版本。
备注
如果同时指定默认发布指令和自定义发布指令,则自定义发布指令始终优先。在上面的示例中,自定义发布指令中指定的使用者账户只能安装应用程序的 V3 版本。
必须先在应用程序包中定义发布指令,然后才能执行以下任务:
创建一个将应用程序包作为数据内容的公共列表。
在使用者账户中安装 Snowflake Native App。
关于升级¶
在 Snowflake Native App Framework 上下文中,升级是对使用者账户中安装的 Snowflake Native App 版本或补丁的更新。Snowflake Native App Framework 支持两种类型的升级:
- 自动升级
自动升级是由提供商启动的升级。当有新版本或补丁可用时,提供商将修改应用程序包上的发布指令。这将触发发布指令指定的应用程序所有已安装实例的自动升级。
- 手动升级
手动升级是使用者为响应提供商的通信而启动的升级。当提供商需要快速向使用者发布更新(例如错误修复)时,手动升级非常有用。
当有新版本或补丁可用时,提供商会修改应用程序包上的发布指令,然后提供商通知使用者有新版本可用。然后,使用者执行升级,方法是通过运行 ALTER APPLICATION 命令来执行升级。通常,手动升级允许使用者比自动升级更快地升级已安装的应用程序。
有关用于执行升级的工作流程的信息,请参阅 升级 Snowflake Native App。
关于跨区域升级¶
有关跨区域升级已安装应用程序的信息,请参阅 跨多个区域升级已安装的应用程序。
将版本或补丁添加到应用程序包¶
在应用程序包中指定应用程序的版本信息。
添加或移除版本和补丁所需的权限¶
要为应用程序包指定版本或补丁,必须具有向您的角色授予的对应用程序包的以下权限之一:
OWNERSHIP
MANAGE VERSIONS
例如,要将对应用程序包的 MANAGE VERSION 权限授予 release_mgr
角色,请使用以下示例中所示的 GRANT <privileges> 命令:
GRANT MANAGE VERSIONS ON APPLICATION PACKAGE hello_snowflake_package
TO ROLE release_mgr;
使用 SQL 将版本添加到应用程序包¶
以下示例演示了如何使用 ALTER APPLICATION PACKAGE 命令将版本添加到应用程序包。
ALTER APPLICATION PACKAGE MyAppPackage
ADD VERSION v1_0
USING '@dev_stage/v1_0'
LABEL = 'MyApp Version 1.0';
在以下示例中, v1_0
是使用者在安装应用程序时不可见的版本的标识符。使用者可以看到 LABEL 子句中定义的版本信息。
一个应用程序只能同时存在两个版本。例如,如果在应用程序中定义了 v1_0 和 v1_1,则必须删除 v1_0 才能创建 v1_2。但是,一个版本可以有多个补丁。
您可以在 manifest.yml
文件中定义版本名称和标签,也可以直接使用 ALTER APPLICATION PACKAGE 命令指定版本名称和标签。如果在 manifest.yml
文件中定义它们以及使用 SQL 命令定义它们,则 SQL 命令中指定的值优先于 manifest.yml
文件中指定的值。
使用 SQL 向应用程序包添加补丁¶
除了为应用程序创建版本外,您还可以为特定版本创建补丁。与版本一样,应用程序补丁也有自己的应用程序文件。
要为应用程序包创建新补丁,请使用 ALTER APPLICATION PACKAGE ... VERSION 命令的 ADD PATCH FOR VERSION 子句,如以下示例所示:
ALTER APPLICATION PACKAGE MyAppPackage
ADD PATCH FOR VERSION V1_0
USING '@dev_stage/v1_0_p1;
在此示例中,未向 ADD PATCH FOR VERSION V1_0 子句提供补丁号。在这种情况下,Snowflake 会自动将补丁号递增 1。
要为具有自定义补丁号的应用程序创建新补丁,请向 ALTER APPLICATION PACKAGE ... VERSION 命令的 ADD PATCH FOR VERSION 子句提供补丁号,如以下示例所示:
ALTER APPLICATION PACKAGE MyAppPackage
ADD PATCH 3
FOR VERSION V1_0
USING '@dev_stage/v1_0_p1;
查看应用程序包的版本和补丁¶
作为提供商,您可以通过对应用程序包运行 SHOW VERSIONS 命令来查看为应用程序定义的版本和补丁。
以下命令显示已为名为 hello_snowflake_package
的应用程序包定义的版本和补丁:
SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
从应用程序包中移除版本¶
要从应用程序包中移除版本,必须验证当前没有发布指令指向要移除的版本。
要查看应用程序包中指定的发布指令,请运行以下示例中所示的 SHOW RELEASE DIRECTIVES 命令:
SHOW RELEASE DIRECTIVES IN APPLICATION PACKAGE hello_snowflake_package;
要从应用程序包中移除版本,请使用 ALTER APPLICATION PACKAGE 命令的 DROP VERSION 子句,如以下示例所示:
ALTER APPLICATION PACKAGE hello_snowflake_package
DROP VERSION v1_0;
运行此命令后,在删除应用程序的所有已安装实例之前,不会删除版本。要验证 drop 命令的状态,请使用 SHOW VERSIONS,如以下示例所示:
SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
dropped_on
列列出了启动 drop 命令时的时间戳。
备注
删除的版本仅在状态为 DROPPED
时才会显示在此命令的输出中。删除应用程序的所有已安装实例后,删除的版本将不再显示。
删除某个版本后,使用者无法再安装该版本应用程序的新实例。
根据向使用者发布应用程序的方式,删除版本可能需要不同的时间:
如果应用程序包尚未发布给使用者,则会立即删除该版本。
如果应用程序包已在单个区域内作为公共或专用列表发布,则会立即删除该版本。
如果应用程序包作为与应用程序包在同一区域内共享的列表的数据产品发布,则该版本将在几个小时内删除。
如果使用 Cross-Cloud Auto-Fulfillment 将应用程序包作为列表的数据产品发布,则可能需要更长的时间才能在所有区域中删除该版本。
设置应用程序包的发布指令¶
将版本添加到应用程序包后,可以指定应用程序包的发布指令。发布指令确定使用者在安装应用程序或自动升级已安装的应用程序时可用的应用程序版本。
设置发布指令所需的权限¶
要设置发布指令,提供商必须具有应用程序包的 MANAGE RELEASES 权限或所有权。
GRANT MANAGE RELEASES ON APPLICATION PACKAGE hello_snowflake_package
TO ROLE release_mgr;
设置应用程序包的默认发布指令¶
将 ALTER APPLICATION PACKAGE 命令与 SET DEFAULT RELEASE DIRECTIVE 结合使用,以设置默认发布指令,如以下示例所示:
ALTER APPLICATION PACKAGE hello_snowflake_package
SET DEFAULT RELEASE DIRECTIVE
VERSION = v1_0
PATCH = 2;
要更新应用程序包的默认发布指令,请再次运行带有 SET DEFAULT RELEASE DIRECTIVE 的 ALTER APPLICATION PACKAGE 命令,并根据需要指定 VERSION 或 PATCH 的新值。
为应用程序包设置自定义发布指令¶
要添加自定义发布指令,请将 ALTER APPLICATION PACKAGE 命令与 SET RELEASE DIRECTIVE 结合使用。使用 ACCOUNTS 子句指定适用此发布指令的账户。例如:
ALTER APPLICATION PACKAGE hello_snowflake_package
SET RELEASE DIRECTIVE hello_snowflake_package_custom
ACCOUNTS = (CONSUMER_ORG.CONSUMER_ACCOUNT)
VERSION = v1_0
PATCH = 0;
更新自定义发布指令¶
要更新自定义发布指令的版本或补丁,请使用带有 MODIFY RELEASE DIRECTIVE 的 ALTER APPLICATION PACKAGE 命令,如以下示例所示:
ALTER APPLICATION PACKAGE hello_snowflake_package
MODIFY RELEASE DIRECTIVE hello_snowflake_package_custom
VERSION = v1_0
PATCH = 0;
但是,您不能修改与发布指令关联的账户。要更改与发布指令关联的组织和账户,请执行以下操作:
通过运行带有 UNSET RELEASE DIRECTIVE 的 ALTER APPLICATION PACKAGE 命令,从应用程序包中移除发布指令。
通过运行带有 SET RELEASE DIRECTIVE 的 ALTER APPLICATION PACKAGE 命令以及使用 ACCOUNTS 子句指定账户列表,将发布指令添加回应用程序包。
备注
更改与发布指令关联的组织和账户时,请确保在移除旧发布指令后立即添加新发布指令。否则,分配给自定义发布指令的账户的已安装应用程序将恢复为默认发布指令。
移除自定义发布指令¶
要从应用程序包中移除自定义发布指令,请将 ALTER APPLICATION PACKAGE 命令与 UNSET RELEASE DIRECTIVE 结合使用,如以下示例所示:
ALTER APPLICATION PACKAGE hello_snowflake_package
UNSET RELEASE DIRECTIVE hello_snowflake_package_custom;
使用发布指令测试版本和补丁¶
在开发模式下从应用程序包安装应用程序时,会显式指定版本和补丁。但是,当使用以下命令安装应用程序时:
CREATE APPLICATION hello_snowflake
FROM APPLICATION PACKAGE hello_snowflake_package
发布指令确定运行此命令时安装的版本。
升级 Snowflake Native App¶
当提供商在应用程序包上设置或更改发布指令时,将启动升级。
用于升级 Snowflake Native App 的工作流程¶
提供商使用以下工作流程升级已安装的应用程序:
更新应用程序包的应用程序逻辑和安装脚本。
如果当前定义了两个版本,请从应用程序包中移除一个版本。
为应用程序包中的更改创建新版本或补丁。
如果应用程序的 DISTRIBUTION 属性设置为
EXTERNAL
,则启动 自动安全扫描。必须先通过安全扫描,然后才能进行升级。通过在提供商的测试账户中创建 APPLICATION 对象来测试新版本。
更新版本或补丁的发布指令。
这将启动自动升级,该升级将更新先前版本的所有已安装实例。提供商可以通知使用者有可用的升级,并要求他们手动执行 手动升级。
备注
升级应用程序包后,在执行对远程区域的刷新之前,对使用者账户中已安装 Snowflake Native App 的更改可能不可见。
您可以使用 DATA_SHARING_USAGE 架构中的 APPLICATION_STATE 视图来监控状态。如果在升级后,在第一次刷新后超过 1 天仍未完成升级,则刷新过程可能存在问题。请联系 ` Snowflake 支持部门 `_。
跨多个区域升级已安装的应用程序¶
如果提供商使用 Cross-Cloud Auto-Fulfillment 发布 Snowflake Native App,则自动升级可能需要一段时间才能升级,具体取决于以下因素:
刷新计划的值。
应用程序的已安装实例数。
部署应用程序的区域数。
如果升级包含需要在远程区域升级的紧急修复程序,提供商可以考虑以下方法更快地执行升级:
将列表的刷新频率降低到较小值。
备注
降低刷新频率可能增加与复制相关的成本。有关更多信息,请参阅 配置 Cross-Cloud Auto-Fulfillment。
要求使用者 执行手动升级。
对已安装的应用程序执行手动升级¶
通过手动升级,使用者可以使用应用程序包中指定的发布指令,启动应用程序已安装版本或补丁的升级。
要将已安装的 Snowflake Native App 升级到最新的可用版本,使用者可以使用 ALTER APPLICATION 命令的 UPGRADE 子句来修改应用程序对象:
ALTER APPLICATION <name> UPGRADE
查看升级状态¶
要查看应用程序的升级状态,请使用 APPLICATION_STATE 视图 系统视图,如以下示例所示:
SELECT * FROM snowflake.data_sharing_usage.APPLICATION_STATE
此视图包括特定于升级的列,包括升级状态和部署应用程序的区域。