EXECUTE DBT PROJECT

Executes the specified dbt project object or the dbt project in a Snowflake workspace using the dbt command and command-line options specified.

另请参阅:

CREATE DBT PROJECTALTER DBT PROJECTDESCRIBE DBT PROJECTDROP DBT PROJECTSHOW DBT PROJECTS

语法

执行具有指定名称的 dbt 项目对象。

EXECUTE DBT PROJECT [ IF EXISTS ] <name>
  [ ARGS = '[ <dbt_command> ] [ --<dbt_cli_option> <option_value_1> [ ... ] ] [ ... ]' ]
Copy

变体语法

执行保存在具有指定工作区名称的工作区中的 dbt 项目。运行此命令变体的用户必须为该工作区的拥有者。

EXECUTE DBT PROJECT [ IF EXISTS ] [ FROM WORKSPACE <name> ]
  [ ARGS = '[ <dbt_command> ] [ --<dbt_cli_option> <option_value_1> [ ... ] [ ... ] ]' ]
  [ PROJECT_ROOT = '<subdirectory_path>' ]
Copy

必填参数

name

执行 dbt 项目对象时,指定要执行的 dbt 项目对象的名称。

使用 FROM WORKSPACE 选项执行 dbt 项目时,为 dbt Projects on Snowflake 指定工作区的名称。工作区名称始终相对于用户个人数据库中的 public 架构指定,该数据库由 user$ 表示。

我们建议将工作区名称用双引号括起来,因为工作区名称区分大小写并且可能包含特殊字符。

以下示例展示了工作区名称引用:

user$.public."My dbt Project Workspace"

可选参数

ARGS = '[ dbt_command ] [ --dbt_cli_option option_value_1 [ ... ] [ ... ] ]'

Specifies the dbt command (https://docs.getdbt.com/reference/dbt-commands) and supported command-line options (https://docs.getdbt.com/reference/global-configs/about-global-configs#available-flags) to run when the dbt project executes. This is a literal string that must conform to the syntax and requirements of dbt CLI commands.

If no value is specified, the dbt project executes with the dbt command (https://docs.getdbt.com/reference/dbt-commands) and command-line options (https://docs.getdbt.com/reference/global-configs/about-global-configs#available-flags) specified in the dbt project object definition. If you specify dbt CLI options without specifying a dbt command, the dbt run command executes by default.

默认:无值

PROJECT_ROOT = 'subdirectory_path'

Specifies the subdirectory path to the dbt_project.yml file within the dbt project object or workspace. This parameter is only supported when executing a dbt project by using the FROM WORKSPACE option.

如果未指定任何值,则 dbt 项目会使用 dbt 项目对象根目录中的 dbt_project.yml 文件执行。

如果根目录或 PROJECT_ROOT 子目录中没有 dbt_project.yml 文件,则会发生错误。

默认:无值

输出

描述

0|1 Success

如果 dbt 项目成功执行,则为 TRUE;否则为 FALSE。如果 dbt 项目执行失败,则会返回异常消息。

EXCEPTION

dbt 项目执行返回的任何异常消息。如果 dbt 项目成功执行,则返回字符串 None

STDOUT

dbt 项目执行返回的标准输出。

OUTPUT_ARCHIVE_URL

输出存档的 URL,其中包含 dbt 项目执行的输出文件。这包括 dbt 写入 /target 目录的日志文件和工件。有关更多信息,请参阅 dbt 文档中的 关于 dbt 工件 (https://docs.getdbt.com/reference/artifacts/dbt-artifacts)。选择此链接会直接导致错误;但是,您可以使用此 URL 来检索 dbt 项目文件和输出。有关更多信息,请参阅 以编程方式访问 dbt 工件和日志

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 一项 权限

权限

对象

USAGE

dbt 项目

Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.

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

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

备注

在 EXECUTE DBT PROJECT 中指定的 dbt 命令使用项目 profiles.yml 文件 outputs 块中所指定 role 的权限运行。操作还会进一步受限,仅限于调用 EXECUTE DBT PROJECT 的 Snowflake 用户获授的那些权限。用户和指定的角色都必须具有所需的权限才能使用 warehouse、对项目 profiles.yml 文件中指定的 schemadatabase 执行操作,以及对 dbt 模型指定的任何其他 Snowflake 对象执行操作。

示例

使用指定目标和模型的默认运行命令

执行一个 dbt run,目标为 dbt 项目对象根目录下 dbt_project.yml 文件中的 dev 配置文件,并从项目 DAG 中选择三个模型。未显式指定任何 run 命令,默认情况下系统会执行该命令。

EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project
  ARGS = '--select simple_customers combined_bookings prepped_data --target dev';
Copy

使用指定目标和模型的显式测试命令

执行一个 dbt test 命令,目标为 dbt 项目对象根目录下 dbt_project.yml 文件中的 prod 配置文件,并从项目 DAG 中选择三个模型。

EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project
  ARGS = '--select simple_customers combined_bookings prepped_data --target prod';
Copy

使用指定下游模型的显式运行命令

执行 dbt run 命令,目标为 dbt_project.yml 文件中的 dev 配置文件,并使用 dbt + 表示法选择 simple_customers 模型下游的所有模型。

EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project
  ARGS = 'run --select simple_customers+ --target dev';
Copy

使用生产任务运行和测试 dbt 项目

为生产 dbt 目标创建一项任务,该任务每六小时执行一次 dbt run 命令。然后创建一项任务,在每项 dbt run 任务完成后执行 dbt test 命令。每项任务的 EXECUTE DBT PROJECT 命令都以 dbt 项目对象根目录下 dbt_project.yml 文件中的 prod 配置文件为目标。

CREATE OR ALTER TASK my_database.my_schema.run_dbt_project
  WAREHOUSE = my_warehouse
  SCHEDULE = '6 hours'
AS
  EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project args='run --target prod';


CREATE OR ALTER TASK change_this.public.test_dbt_project
        WAREHOUSE = my_warehouse
        AFTER run_dbt_project
AS
  EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project args='test --target prod';
Copy
语言: 中文