部署和管理 DCM Projects¶
本主题介绍如何创建和部署 DCM Projects 来管理 Snowflake 环境(包括账户层级)。
管理 DCM project 涉及以下步骤:
为 DCM project 准备 您的 Snowflake 账户。
在项目文件中 定义 项目配置和对象。
创建 DCM Projects 对象。
计划 在部署前预览预计的更改。
部署 项目。
根据需要,通过监控、更新和重复该流程来 维护 项目。
您可以持续部署项目的增量变更以及大规模账户基础设施变更。
建议持续将增量变更和添加项部署到项目中,而不是在单次部署中进行 0 到 100 次大规模账户基础设施变更。
准备 DCM project¶
要开始使用 DCM Projects,您的 Snowflake 账户必须满足以下先决条件:
可以在其中创建 DCM Projects 对象的数据库和架构
具有创建 DCM Projects 对象权限的角色,以及对仓库运行查询的访问权限
对于 Snowflake CLI,需要具有创建临时暂存区权限的角色
本节描述了您需要为 DCM Projects 完成的准备任务:
如果您想使用 Snowflake CLI 或 Cortex CLI,请安装要搭配 DCM 项目使用的接口。
:ref:`配置 Git 集成 <label-dcm_projects_git_integration>`(推荐但非强制)
备注
snowflake-labs DCM 存储库 (https://github.com/Snowflake-Labs/snowflake_dcm_projects) 会不断更新资源,以帮助您入门。
Quickstarts 和演示项目:可以克隆到 Snowflake 工作区或本地文件夹中以试用 DCM Projects 命令并探索 DCM Projects 功能的存储库。
示例 GitHub 操作和工作流程:使用 Snowflake CLI 的 CI/CD 管道模板,用于测试和部署 DCM 项目。
界面工具¶
您可以为 DCM Projects 使用以下界面选项。
界面工具 |
最适合用于 |
|---|---|
Snowsight Snowsight 中的工作区是您账户中的 Snowflake 原生云 IDE。 |
|
使用 Snowflake CLI 的 本地 IDE 软件工程师最熟悉、最个性化的界面。 |
|
Cortex Code Snowflake 的代理 AI 工具。有关更多信息,请参阅 DCM Projects 中的 Cortex Code。 |
|
SQL 命令 |
|
DCM Projects 中的 Cortex Code¶
Cortex Code 是一种用于 Snowflake 的代理 AI 工具。随着 DCM 技能启用,Cortex Code 可以自主创建、迁移、调试和部署 DCM Projects。它还可以逐步与您一起工作。
备注
具备 DCM 技能的 Cortex Code 目前仅可通过 Cortex Code CLI 使用该技能。它在 Snowsight Workspaces 中不可用。
Cortex Code DCM 技能可实现以下目的:
从头搭建新的 DCM project,包括清单文件、文件夹结构和定义文件。
创作和编辑 DEFINE 语句、Jinja 模板和宏。
运行 PLAN、DEPLOY、REFRESH、TEST 和 PREVIEW 命令。
解释计划输出、诊断故障并提出修复建议。
下载并检查部署工件。
导航并解释现有 DCM project。
要开始使用 Cortex Code DCM 技能,请按照以下步骤操作:
如 安装 Cortex Code 中所述,安装 Cortex Code CLI。
在终端中启动 Cortex Code。
使用
$dcm技能参考或在您的自然语言提示中使用术语DCM,与您的 DCM Projects 以对话方式进行交互。
例如:
“为我们的分析管道创建一个新 DCM 项目”
“根据 PROD 目标规划我的项目”
“为什么我上次的计划失败了?”
“为客户支出添加新的动态表定义”
适用于 DCM Projects 的 Snowflake CLI¶
Snowflake CLI 是 Snowflake 的命令行界面。它是用于从本地 IDE 与 Snowflake 账户进行交互的工具。
DCM 项目需要 Snowflake CLI 版本 3.16 或更高版本。如 安装 Snowflake CLI 中所述安装或升级 Snowflake CLI。
如 :doc:` 中所述配置与 Snowflake 账户的连接,配置 Snowflake CLI 并连接到 Snowflake </developer-guide/snowflake-cli/connecting/connect>`。确认您有有效的连接:
导航到 Git 存储库克隆的本地目录。例如:
请参阅您可以使用的 Snowflake CLI DCM 命令:
Git 集成¶
连接到存储 DCM project 定义文件的 Git 存储库。
为计划的变更创建或选择 Git 分支。
Snowflake 将该分支中的文件克隆到工作区编辑器中。
导航到 DCM project 定义文件所在的文件夹,或想要创建它们的文件夹。
-
此处不需要 VSCode 的 Snowflake 扩展,但可能会有所帮助。
连接到 Git 存储库。
连接本地 IDE 到远程 Git 存储库。
为计划的变更创建或选择分支。
将该分支克隆到本地磁盘。
导航到 DCM Projects 定义文件所在的文件夹,或想要创建它们的文件夹。
创建 DCM project¶
所需的角色和权限¶
创建 DCM project 对象的用户角色必须具有以下角色和权限:
CREATE DCM PROJECT ON SCHEMA 权限:
创建 DCM project¶
使用以下选项之一创建 DCM project 对象。
要为非默认目标创建项目,请使用以下命令之一:
在导航菜单中,选择 Projects » Workspaces。
在 Workspaces 页面上,选择“+Add new”->“DCM Project”,创建一个新的 DCM project 文件夹
选择“定义默认目标环境”,为清单中的默认目标选择或创建新的 DCM project 对象
如果要针对在清单中定义了 DCM project 对象的目标运行 DCM PLAN,但目标尚不存在,则 UI 会提示您在执行计划之前,确认基于定义的名称和所有者角色创建 DCM project 对象。
Target 指示指定 DCM project 对象是否已存在,以及是否可以使用。
绿色:DCM project 对象存在,可用于运行 PLAN 或 DEPLOY。
红色:DCM project 对象不存在,首先需要创建。
访问控制和角色权限¶
您可以为 READ、MONITOR 或 OWNERSHIP 权限设置架构级别 DCM project 对象的基于角色的访问控制 (RBAC)。
这些权限独立于工作区、暂存区或存储库中存储的定义文件的访问控制。
权限 |
描述 |
允许的操作 |
|---|---|---|
READ |
|
|
MONITOR |
|
|
OWNERSHIP |
|
|
备注
与其他 Snowflake 命令一样,为运行命令的用户启用 来自次要角色的权限 时需遵守 EXECUTE DCM PROJECT。运行 USE SECONDARY ROLES NONE;,这样您就不会利用项目所有者角色以外的其他角色的权限。这可确保由具有相同主要角色的不同服务用户执行时,部署行为在不同环境中保持一致。
DCM 所有权 - 受管理对象¶
默认情况下,部署 DCM project 的角色具有所有已部署对象的 OWNERSHIP 权限。
项目定义可以包括对其他角色的 GRANT OWNERSHIP 语句。Snowflake 建议 DCM project 所有者角色仅将 DCM 管理对象的所有权授予它也拥有的另一个较低级别的角色。然后,项目可以继续管理此对象,因为项目所有者角色会“继承”新对象所有者角色的权限。
如果 DCM project 所有者角色将 DCM 管理对象的所有权授予给另一个自身不拥有的角色,则项目将无法再管理此已部署的对象,因为项目所有者角色不再拥有该对象的所有权。后续部署将失败。需要从项目中移除对象定义,或者需要将所有权重新授予项目所有者角色。
如果要将现有对象迁移到由 DCM project 管理,拥有 DCM project 对象的角色还必须拥有由 DCM project 管理的对象的所有权权限(直接所有权或通过其他角色继承的所有权)。
备注
如果是迁移的对象,我们建议添加相应的 GRANT OWNERSHIP 语句项目定义,以确保当前状态和 DCM project 定义是同步的。
定义 DCM project¶
DCM project 基于清单文件和一个或多个 SQL 对象定义文件。这些文件通常在 Git 存储库或本地工作区中存储和管理。
清单文件
指定具有相应账户标识符、DCM project 对象、这些对象的所有者角色,以及可选的模板配置的一个或多个目标环境
(可选)指定模板默认值和一个或多个配置,其中包含 模板变量 的值。
对象定义文件
定义一组要在 DCM project 中一起管理的 Snowflake 对象、授权和期望。
请参阅 创建用于存储定义文件的 DCM project 文件夹,了解如何设置 DCM project 文件夹和定义文件,以及如何使用模板来定义 DCM project。
计划 DCM project¶
计划 DCM project 在部署之前执行试运行以预览更改。Snowflake 会比较您的 项目定义文件 与现有对象,并显示将创建、更改或删除哪些对象。您的账户不会发生任何变化。
在部署 DCM 项目之前,使用规划来审查和验证变更。您可以指定选项,例如 配置 或计划结果的输出路径。
PLAN 会尽可能模仿 DEPLOY 命令,除非它实际上不执行任何 DDL 语句。
重要
在部署之前对项目始终运行 PLAN 命令,以帮助确保不存在语法、模板、对象依赖项、访问权限等方面的错误。查看计划输出以调试任何错误,使用提供的变量预览呈现的 Jinja,并预览部署后将进行的更改。
该计划执行以下步骤:
使用选定的配置文件或运行时提供的值呈现所有 Jinja 模板。
将所有定义与上次部署中作为部分定义的实体的当前状态进行比较。
将所有已定义的语句转换为 CREATE、ALTER、DROP、GRANT 和 REVOKE 语句。
根据语句的相互依赖关系对所有语句进行排序。
编译所有语句。
备注
虽然 PLAN 会捕获部署期间可能发生的几乎所有可能错误,但不能保证部署成功。
运行 PLAN 命令¶
PLAN 命令会将以下信息作为输入:
清单文件的路径
CLI 从清单中读取目标(
default_target或--target标志)。对于 SQL 命令,必须提供清单文件的路径和项目名称。Jinja 变量的定义值(可选)。
目标的
templating_config会自动选择配置文件。对于 SQL 命令,使用 USING CONFIGURATION 子句来指定配置文件。要覆盖的配置文件的一个或多个值(可选)。
以下示例展示了如何运行 PLAN 命令。
在本地 IDE 终端运行 snow dcm plan 命令或作为 Git 工作流程的一部分运行。
使用 CLI 命令来计划本地目录中的项目 DCM 的示例:
使用 CLI 命令计划来自 Snowflake 暂存区或 Git 存储库克隆的项目 DCM 的示例是:
使用 CLI 命令计划具有可选实参的项目 DCM 的示例是:
变量需要放在双引号内,字符串值需要加上单引号。值列表需要方括号。
在 DCM 控制面板,位于顶部:
在当前工作区中选择项目文件夹。
选择您的目标(如果您有多个目标)。
(可选)覆盖特定参数。
点击 Plan。
Snowsight UI 自动使用清单目标中定义的 DCM project 对象。如果项目对象尚不存在,您可以从 UI 中创建。
当 PLAN 完成后,将在新选项卡中打开输出。如果您没有看到它,请再次点击 Plan 打开选项卡。
如果计划已存在,并且您更改了定义,则可以选择重新计划。
计划输出始终在项目子文件夹 out/ 下自动生成。
您可以从任何可以运行 SQL 命令的位置、在 Snowflake 内部,或通过连接到 Snowflake,以便在 SQL 中执行 DCM PLAN。使用 EXECUTE DCM PROJECT 命令与 PLAN 模式。
使用 SQL 命令,通过工作区路径计划 DCM 项目的示例是:
使用 Jinja 与配置文件但覆盖 wh_size 和 teams 时,使用 SQL 命令来计划 DCM 项目的示例是:
在没有配置文件的情况下使用 Jinja 模板时,使用 SQL 命令计划 DCM project 的示例是:
定义文件路径¶
您可以使用以下选项来引用清单和定义文件的位置。
从工作区路径
Snowsight 用户界面会自动列出所有当前工作区中的 DCM project 定义。您可以选择其中一个路径,工作区将使用它来运行 DCM 命令。
如果您想在工作区中手动运行 SQL 命令,您还可以在任何工作区中引用相同的路径。
提示: 工作区中每个文件后面的三点菜单可让您将该文件的完整路径复制到您的 SQL 代码。
使用 SQL 命令,通过工作区路径计划 DCM 项目的示例是:
从磁盘上的本地 Git 存储库克隆
在本地 IDE 中运行 CLI 命令之前,请选择包含
manifest.yml文件的目录或者,您可以指定其他本地目录,其中包含要使用的清单和定义。CLI 命令从本地 Git 存储库的当前目录计划 DCM project 的示例:
CLI 命令从本地 Git 存储库克隆中的不同目录计划 DCM project 的示例:
来自工作流程中的远程存储库
可以在 DCM 命令在 CI/CD 工作流程中执行时使用相同的 CLI 语法。
CI/CD 工作流程从本地 Git 存储库克隆计划 DCM project 的示例:
来自 Snowflake 中的暂存区或 Git 存储库克隆
如果您想在 Snowflake 中运行执行 DCM 命令的过程或任务,此 SQL 命令可以引用账户内 Snowflake 暂存区或 Git 存储库克隆的绝对路径。
对于 Git 存储库克隆,请考虑首先运行 ALTER GIT REPOSITORY FETCH 以获得最新版本。
'@...'路径只能在执行 DCM SQL 命令时使用。SQL 命令从 Snowflake 中暂存区或 Git 存储库克隆计划 DCM 项目的示例是:
计划输出¶
备注
在预览阶段,确切的输出格式可能会发生相应变化。
标准计划输出包含以下有关计划执行的 JSON 格式信息:
属性 |
描述 |
|---|---|
|
输出格式的架构版本。版本 2 是最新且唯一受支持的版本。 |
|
有关执行的上下文信息。 |
|
执行命令时的 ISO 8601 时间戳。 |
|
生成此计划的查询的唯一标识符。 |
|
DCM 项目对象的完全限定名称。 |
|
执行命令的用户的名称。 |
|
用于执行命令的活动角色。 |
|
已执行的命令。 |
|
变更条目数组。每个条目代表一个将要创建、更改或删除的对象。空数组表示项目定义已与账户同步。 |
|
对象的计划操作。可能的值: |
|
标识目标对象。 |
|
Snowflake 对象类型。 |
|
对象名称。 |
|
对象的完全限定名称。 |
|
包含对象的数据库。为账户级对象省略。 |
|
包含对象的架构。对于数据库级和账户级对象省略。 |
|
详细说明特定属性修改的变更描述符数组。 |
|
变更的类型。可能的值: |
|
正在设置或更改的属性的名称。当 |
|
属性的新值。当 |
|
更改前属性的先前值。仅在 |
|
正在修改的集合的名称(例如, |
|
用于标识集合中项目的标签(例如, |
|
集合项描述符的嵌套数组。仅在 |
|
集合项的变更类型。可能的值: |
|
标识集合中的项目。可以是字符串或对象,具体取决于集合类型。 |
|
为此项目进一步变更描述符的数组。为 |
计划输出的示例:
部署 DCM project¶
当您部署 DCM project 时,将执行以下操作:
已定义但尚不存在的对象将被创建。
已存在但与当前定义不同的对象将被更改。
已定义的对象将被跳过。
已存在但不再被定义的对象将被删除。
同样的行为也适用于项目中定义的授权和附加数据质量期望。
重要
为避免任何意外的数据丢失,请在运行 DEPLOY 之前始终运行并 检查您的 PLAN 输出。
每个 DCM project 任何时候只能部署一个实例。多个配置文件不能共存。使用相同的 DCM project 部署配置 B 将删除 B 中未定义的其他先前配置中的任何对象。
为每个目标环境创建一个 DCM project。然后,每个环境的 DCM project 可以指向相同的定义文件,但使用每个变量的不同值独立部署(例如 suffix => 'DEV_JS'),以便它们可以在同一个 Snowflake 账户上独立并存。
如果要使用略有变化的预定义配置文件,可以在运行时覆盖所选变量的值。
例如:
例如,每次部署尝试(成功、失败或取消)都有一个部署编号 DEPLOYMENT$1。(可选)您可以指定一个唯一的字符串作为部署 别名,以便为各个部署命名,以便在部署历史记录中更好地观察。请将部署 别名 视为代码变更的提交消息。
每个 DEPLOY 命令首先运行一个内部 PRE-PLAN,作为部署的一部分。如果 PRE-PLAN 成功,则 DEPLOY 将在之后直接执行。没有拦截或审查此内部计划步骤的选项。PRE-PLAN 的执行会进一步降低部署期间的失败风险。如果 DEPLOY 失败,您可以在错误消息中看到它是否在 PRE-PLAN 或 DEPLOY 步骤。在 PRE-PLAN 步骤期间失败类似于PLAN – 没有执行 DDL 更改。
重要
在 DEPLOY 步骤期间失败可能会导致部分执行已定义的变更。这可能会导致某些被管理对象处于未定义状态。在大多数情况下,修复根本原因并再次执行 DEPLOY 可恢复定义的目标状态。
DEPLOY 输出文件的目标路径无法自定义。部署工件始终存储在 DCM project 中。
运行 DEPLOY 命令¶
要执行 DEPLOY 命令,请提供以下输入:
清单文件的路径。
如果在清单中定义了配置文件,则必须命名配置文件。
(可选)配置文件的值将替换默认值。
(可选)部署 别名。
以下示例展示了如何运行 DEPLOY 命令。
使用 Jinja 与配置文件但覆盖 wh_size 和 teams 时,使用 SQL 命令来部署 DCM project 的示例是:
您可以在本地 IDE 终端运行 snow dcm deploy 或作为 Git 工作流程的一部分运行。
使用 CLI 命令来部署本地目录中的 DCM project 的示例:
CLI 命令以非默认环境为目标部署 DCM project 的示例是:
CLI 命令部署带有可选实参的 DCM project 的示例是:
在导航菜单中,选择 Projects » Workspaces。
在当前工作区中选择项目文件夹。
选择您的目标(如果您有多个目标)。
点击 Plan。
UI 将自动使用清单目标中定义的 DCM project 对象。如果项目对象尚不存在,您可以从 UI 中创建。
一旦 PLAN 完成后,输出将在新选项卡中打开。如果您没有看到它,请再次点击 Plan 打开选项卡。
如果计划已存在,并且您更改了定义,则可以选择重新计划。
查看您的 PLAN 输出,以确保它不包含意外的更改。
点击 Deploy,使用来自 PLAN 的相同目标和值执行部署。
请参阅 计划输出,了解标准计划输出结构。
管理 DCM project¶
显示由 DCM project 管理的所有对象¶
SHOW ENTITIES IN DCM PROJECT 命令允许您查看当前由特定 DCM project 管理的所有 Snowflake 对象的列表。它提供所有对象的完全限定名称列表。要查看结果,您需要 DCM project 上 READ 的权限以及查看托管对象本身的权限。
备注
结果不一定与最近部署的对象匹配。手动删除或从项目中分离的对象不会在结果中列出。
您可以使用 LIKE,按名称搜索或使用流运算符进一步处理或筛选结果集。
同样,您可以使用随此项目定义和部署的 SHOW GRANTS 和 SHOW FUTURE GRANTS。
查看当前由 DCM project 管理的所有对象的示例:
在导航菜单中,选择 Catalog » Database Explorer。
前往包含 DCM project 对象的架构。
选择 DCM project 对象以查看其详细信息。
选择 Objects 选项卡,以查看此项目对象当前管理的所有 Snowflake 对象的列表。
点击对象的名称可在新选项卡中打开该对象的详细信息页面。
从 DCM project 中分离对象¶
使用带有 UNSET DCM PROJECT 子句的 ALTER <object> 命令可以分离已部署且现在由 DCM project 管理的对象。该命令会移除对象和 DCM project 之间的关联,但不会删除对象。当您想开始通过不同的 DCM project 管理对象时,可以使用此命令。
在再次部署之前,确保从 项目定义文件 中移除相应的 DEFINE 语句。否则,该对象将被重新集成到 DCM project 中。
将对象与 DCM project 分离的命令 SQL 示例:
您不能将已部署的授权或期望与 DCM 项目分离。
删除 DCM project¶
当 DCM project 对象被删除后,所有托管实体、授权和期望仍保持为“非托管”状态。
重要
删除或替换 DCM project 对象会导致您丢失该对象包含的所有部署历史记录工件。
在导航菜单中,选择 Catalog » Database Explorer。
前往包含 DCM project 的架构。
选择 DCM project 以查看其详细信息页面。
点击右上角的三点菜单,然后选择 Drop。
自动化 DCM project 部署¶
CI/CD 最佳实践¶
在使用 CI/CD 管道自动部署时,请遵循以下实践:
以非生产环境为目标的 DCM project 应由与其生产环境对应的角色拥有,以避免意外部署到生产环境。
以生产环境为目标的 DCM project 应由生产部署的专用角色拥有,该角色具有专门定制的访问权限,这些权限足以部署项目中的所有对象。
避免为 DCM project 所有权使用一般管理员角色。仅将此类角色授予服务用户,而不是单个开发者。
仅将专用生产部署角色授予服务用户,而不是单个开发者。
将所有权限制为生产部署角色,以确保关键基础设施或数据产品的不可变性。
如果专用生产部署角色将生产对象的所有权授予其他角色,则被授予这些角色的用户仍然可以修改或删除生产对象。
GitHub 操作示例¶
本节提供描述 DCM Projects 中典型 CI/CD 模式的示例 GitHub 操作工作流程。同样的概念也适用于其他基于 Git 的平台,例如 Azure DevOps、GitLab CI/CD 或 Bitbucket Pipelines。不同的只有工作流程语法。
每个示例都提供了构建块,您可以根据管道设置、环境拓扑和组织要求对这些构建块进行自定义和组合。
示例工作流程演示了以下模式,适用于任何 DCM CI/CD 设置:
清单驱动的配置 每个工作流程会读取来自清单目标的
account_identifier、project_owner和project_name。这样可以将环境配置保留在一个位置,并避免在不同 GitHub 密钥处进行重复配置。数据删除保护 部署工作流程会解析对数据承载对象(如数据库、架构、表和暂存区)的破坏性 DROP 操作的
plan_result.json,如果发现任何操作,则会阻止部署。顺序暂存区生产升级 只有在暂存部署成功、动态表刷新且数据质量测试通过后,生产部署才会开始。
结构化计划输出解析 工作流程使用
jq从plan_result.json中提取操作计数和对象域,从而轻松构建自定义摘要和检查。AI 支持的摘要
snow cortex complete生成 post-hook 脚本结果的自然语言摘要和动态表刷新输出,供 GitHub 行为作业摘要使用。
在运行这些示例工作流程之前,请满足以下先决条件:
存储 Git 存储库中的 DCM project 文件。
授予用户创建和运行 GitHub 操作的权限。
配置Snowflake 服务用户凭据的 GitHub 密钥(
SNOWFLAKE_USER、SNOWFLAKE_PASSWORD或个人访问令牌)。配置 DCM project 文件夹路径 (
DCM_PROJECT_PATH) 的 GitHub 变量。配置每个清单目标的 GitHub 环境(例如,
DCM_STAGE、DCM_PROD_US)。
用于在 GitHub 操作中设置 Snowflake 连接,请参阅博客文章的前半部分,GitHub 操作 CI/CD 实用指南 (link removed)。
请参阅 snowflake-labs DCM 存储库 (https://github.com/Snowflake-Labs/snowflake_dcm_projects/GitHub_workflows),了解一组涵盖了整个 DCM Projects 中 CI/CD 生命周期的 GitHub 操作工作流程。
所有示例工作流程都会使用 yq 从清单目标中直接读取 Snowflake account_identifier 和 project_owner 角色,以便特定于环境的配置存在于版本控制的 manifest.yml 而不是重复的 GitHub 密钥中。只有服务用户凭据会存储为密钥。
示例工作流程:验证连接和权限¶
工作流程配置文件:DCM_0_Test_Connections.yml (https://github.com/Snowflake-Labs/snowflake_dcm_projects/blob/main/GitHub_workflows/DCM_0_Test_Connections.yml)
触发器:手动触发
workflow_dispatch事件
此工作流程验证 GitHub 操作服务用户可以连接到清单中定义的每个目标环境。在设置新存储库、注册新账户或调试身份验证问题时会使用它。该工作流程执行以下步骤:
动态解析
manifest.yml中的所有目标名称。使用 GitHub 操作矩阵策略并行测试每个目标。
对于每个目标,验证 Snowflake 连接,报告连接的账户、用户和角色,并检查连接的角色是否与 DCM project 所有者相匹配。
报告 DCM project 对象是否已存在,以及服务用户是否具有部署权限。
示例工作流程:预览拉取请求的变更¶
工作流程配置文件:DCM_1_Test_PR_to_main.yml (https://github.com/Snowflake-Labs/snowflake_dcm_projects/blob/main/GitHub_workflows/DCM_1_Test_PR_to_main.yml)
触发器:针对
main分支打开、同步或重新打开的拉取请求
此工作流程同时对暂存和生产目标运行 PLAN,作为每个拉取请求的集成测试。它直接为审阅者提供有关拉取请求的计划变更的摘要。该工作流程执行以下步骤:
针对 STAGE 和 PROD 并行目标运行
snow dcm plan。解析
plan_result.json,总结按对象域分组的 CREATE、ALTER 和 DROP 操作。上传计划工件以供以后检查。
将合并的注释发布到拉取请求,其中包含两个环境的计划摘要。
如果任一 PLAN 失败,则检查失败,阻止合并。
示例工作流程:将变更部署到暂存区和生产环境¶
工作流程配置文件:DCM_2_Deploy_to_Stage_and_Prod.yml (https://github.com/Snowflake-Labs/snowflake_dcm_projects/blob/main/GitHub_workflows/DCM_2_Deploy_to_Stage_and_Prod.yml)
触发器:推送到
main分支(通常是合并的拉取请求)
此工作流程实现了顺序升级管道。变更首先会部署到暂存区,进行端到端验证,然后才会升级到生产环境。如果任意暂存区失败,则管道将停止,生产环境不受影响。
暂存区部署顺序:
规划型:运行
snow dcm plan并概括变更集。数据删除检测:解析计划输出,如果其中包含对数据库、架构、表或暂存区的 DROP 操作,则阻止管道。
部署:运行
snow dcm deploy。发布脚本:借助使用
snow sql的 Jinja 变量注入,运行可选的 SQL post-hook 脚本。刷新动态表:运行
snow dcm refresh以应用任何新的转换逻辑。测试预期:运行
snow dcm test以验证数据质量预期。
生产部署顺序:
对生产目标重复相同的六个步骤,但前提是所有暂存作业都通过了。
所有作业完成后,工作流程会将最终状态摘要发布到原始拉取请求。
备注
在 GitHub 操作作业摘要中,部署工作流程使用 snow cortex complete 为 post-hook 脚本结果和动态表刷新输出生成人类可读的摘要。
示例工作流程:在暂存区测试预期¶
工作流程配置文件:DCM_3_Test_STAGE_Expectations.yml (https://github.com/Snowflake-Labs/snowflake_dcm_projects/blob/main/GitHub_workflows/DCM_3_Test_STAGE_Expectations.yml)
触发器:手动触发
workflow_dispatch事件
此工作流程提供了一种按需方式来验证暂存环境中的数据质量,而无需触发完整部署。使用它来验证手动数据更改或上游数据刷新后的预期,或作为定期质量检查。该工作流程执行以下步骤:
刷新由暂存区 DCM project 管理的所有动态表。
运行附加到项目中表、动态表和视图的所有数据质量预期测试。
报告通过或失败状态,并提供与违反预期有关的详细信息。
常见问题 (FAQ)¶
- 如何重命名现有对象?
运行 DCM 项目外部的 ALTER 命令。
更改定义。
运行 PLAN 以验证新定义是否与新状态匹配(PLAN 中无更改)。
运行 DEPLOY 以保存新状态。
- 如何部署 DEFINE 语句尚不支持的对象?
在执行 DCM 项目计划或部署后,您可以在单独的 SQL 脚本中运行 CREATE IF NOT EXISTS 或 CREATE OR REPLACE 语句。
这两个选项都支持 Jinja2 模板化和试运行(试运行会渲染 Jinja 模板,但不会验证 SQL 编译是否成功)。
例如: