EXECUTE DCM PROJECT

DCM 项目 执行以下操作之一:

  • EXECUTE DCM PROJECT <name> PLAN 对 DCM project 进行试运行,以分析在部署期间将应用到目标上的变更,但不会实际应用任何变更。

  • EXECUTE DCM PROJECT <name> DEPLOY 将项目定义文件中定义的变更部署到账户中。

  • EXECUTE DCM PROJECT <name> REFRESH ALL 刷新由 DCM project 管理的动态表。

  • EXECUTE DCM PROJECT <name> TEST ALL 测试由 DCM project 管理的、来自关联数据度量函数的所有预期。

  • EXECUTE DCM PROJECT <name> PREVIEW 返回为指定表、视图或动态表在源路径中定义的当前定义的数据样本。

另请参阅:

CREATE DCM PROJECTALTER DCM PROJECTDESCRIBE DCM PROJECTDROP DCM PROJECTSHOW DCM PROJECTSSHOW DEPLOYMENTS IN DCM PROJECT

语法

EXECUTE DCM PROJECT <name>
  PLAN
  [ USING [ CONFIGURATION <config_name> ] [ (<expr>, [, <expr>, ...]) ] ]
  FROM '<source-files_path>'

EXECUTE DCM PROJECT <name>
  DEPLOY [ AS '<deployment_name_alias>' ]
  [ USING [ CONFIGURATION <name> ] [ (<expr>, [, <expr>, ...]) ] ]
  FROM '<source-files_path>'

EXECUTE DCM PROJECT <name>
  REFRESH ALL

EXECUTE DCM PROJECT <name>
  TEST ALL

EXECUTE DCM PROJECT <name>
  PREVIEW <fully_qualified_table_object_name>
  USING CONFIGURATION <config_name>
  FROM '<source_files_path>'

必填参数

name

指定要执行的 DCM 项目的标识符。

如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

PLAN

示 Snowflake 对 DCM project 进行试运行。在试运行中,Snowflake 会分析在部署期间将应用到目标上的变更,但不会实际应用任何变更。

DEPLOY [ AS 'deployment_name_alias' ]

将项目定义文件中定义的变更部署到账户中;可选择为部署指定别名。

FROM 'source_files_path'

指定包含 DCM project 源文件的目录。该目录必须包含一个清单文件以及 /sources/definitions/ 中的至少一个定义文件。如果指定了配置,清单文件将提供模板值。

REFRESH ALL

刷新当前由 DCM project 管理的所有动态表。

TEST ALL

测试附加到当前由 DCM project 管理的表、动态表或视图上的所有数据质量预期。

PREVIEW fully_qualified_table_object_name

返回为指定表、视图或动态表在源路径中定义的当前定义的数据样本 – 与任何已部署状态无关。

可选参数

USING CONFIGURATION config_name

指定要使用的配置。 这使您能够为不同环境(如开发、预发布或生产环境)自定义部署,而无需使用不同的项目定义文件。

如果配置名称不是全大写,请将其用双引号引起来。

USING ( expr [, expr , ... ] )

可选择指定模板变量的值。使用此选项将覆盖该特定变量的任何默认值或配置值。单个表达式必须使用以下形式:<variable_name> => <variable_value>。对于列表,请使用以下形式:<variable_name> => [<value1>, <value2>, ...]。例如:wh_size => 'MEDIUM'teams => ['TEAM_A', 'TEAM_B']

这使您能够为不同环境(如开发、预发布或生产环境)自定义部署,而无需使用不同的项目定义文件。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

OWNERSHIP

DCM 项目

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

对架构中的对象进行操作至少需要父数据库的一项权限和父架构的一项权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

输出

DCM project 执行后,此命令根据不同的变体返回以下输出:

  • PLAN 和 DEPLOY:包含一个带有变更日志的 JSON 对象的单行

  • PREVIEW:选择使用 时默认使用的角色和仓库。结果集。

  • REFRESH ALL:包含完整响应 JSON 对象的单行数据。

  • TEST ALL:包含完整响应 JSON 对象的单行数据。

使用说明

当使用 EXECUTE DCM PROJECT PLAN 执行 DCM project 时,该命令的输出与实际部署的输出相同。区别在于不会对受影响的账户应用任何更改。此功能使您能够验证渲染后的定义文件是否具有有效的语法、将对账户应用哪些更改,以及项目所有者角色是否具有应用这些更改所需的权限。

为避免意外更改并捕获错误,在部署 DCM project 之前,请始终先运行 EXECUTE DCM PROJECT PLAN。

对模板变量的支持

模板变量允许您在 DCM project 执行期间动态选择参数化定义文件的内容。您可以通过以下方式使用模板变量:

有关示例,请参阅 模板变量示例 部分。

示例

基本示例

以 PLAN 模式执行 DCM project,以验证对项目的更改而不应用这些更改:

EXECUTE DCM PROJECT my_project
  PLAN
  FROM '@my_database.my_schema.my_stage/my_project';

以 DEPLOY 模式执行 DCM(以应用更改),并指定部署别名和名为 PROD 的配置:

EXECUTE DCM PROJECT my_project
  DEPLOY AS "my_update"
  USING CONFIGURATION PROD
  FROM '@my_database.my_schema.my_stage/my_project';

模板变量示例

以下示例演示了如何在 EXECUTE DCM PROJECT 语句中为模板变量指定值。

覆盖 DCM 项目清单文件中定义的模板变量

  1. 在清单文件中定义一个名为 desc 的模板变量:

    manifest_version: 2
    type: DCM_PROJECT
    default_target: DCM_DEV
    targets:
      DCM_DEV:
        desc: "created by hello world project"
    
  2. 创建使用模板变量的定义文件:

    DEFINE DATABASE NEW_DB;
    DEFINE TABLE NEW_DB.PUBLIC.TBL (ID INT) COMMENT = '{{desc}}';
    
  3. 以 DEPLOY 模式调用 EXECUTE DCM PROJECT,并为 desc 变量指定一个值,覆盖其在清单文件中的默认值:

    EXECUTE DCM PROJECT MY_PROJECT DEPLOY
      USING CONFIGURATION FIRST_CONFIG (desc => 'This object is mine')
      FROM '/my/project/source';
    

为清单文件中未定义的模板变量提供值

  1. 创建一个包含所需命令的定义文件:

    DEFINE DATABASE NEW_DB;
    DEFINE TABLE NEW_DB.PUBLIC.TBL (ID INT) COMMENT = '{{desc_new}}';
    
  2. 调用 EXECUTE DCM PROJECT 命令,并为 desc_new 变量指定一个值:

    EXECUTE DCM PROJECT MY_PROJECT (desc_new => 'This object is mine');