EXECUTE DBT PROJECT

使用指定的 dbt 命令和命令行选项,在 Snowflake 工作区中执行指定的 dbt 项目对象 或 dbt 项目。

另请参阅:

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> [ ... ] ] [ ... ]' ]
  [ PROJECT_ROOT = '<subdirectory_path>' ]
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 [ ... ] [ ... ] ]'

指定在执行 dbt 项目时要运行的 dbt 命令 (https://docs.getdbt.com/reference/dbt-commands) 和受支持的 命令行选项 (https://docs.getdbt.com/reference/global-configs/about-global-configs#available-flags)。这是一个字面量字符串,必须符合 dbt CLI 命令的语法和要求。

如果未指定任何值,dbt 项目将使用 dbt 项目对象定义 中指定的 dbt 命令 (https://docs.getdbt.com/reference/dbt-commands) 和`命令行选项`_ 执行。如果指定了 dbt CLI 选项,而未指定 dbt 命令,则默认情况下会执行 dbt run 命令。

重要

您在 EXECUTE DBT PROJECT 命令中显式指定的实参会覆盖 DBT PROJECT 定义中指定的所有 DEFAULT_ARGS。

默认:无值

PROJECT_ROOT = 'subdirectory_path'

指定 dbt 项目对象或工作区内 dbt_project.yml 文件的子目录路径。

如果未指定任何值,则 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 项目

要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。

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

有关对 安全对象 执行 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 项目对象定义中的默认运行和 DEFAULT ARGS

对于包含三个 dbt 项目子目录的 dbt 项目对象,对 project2 子目录中的 dbt 项目执行 dbt run 命令。运行命令默认执行的,该命令以 dev 配置文件为目标,该配置文件通过 DBT PROJECT 定义中的 DEFAULT ARGS 指定。

EXECUTE DBT PROJECT my_database.my_schema.my_parent_dbt_project PROJECT_ROOT = 'project2';
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
语言: 中文