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.
语法¶
执行具有指定名称的 dbt 项目对象。
EXECUTE DBT PROJECT [ IF EXISTS ] <name>
[ ARGS = '[ <dbt_command> ] [ --<dbt_cli_option> <option_value_1> [ ... ] ] [ ... ]' ]
[ DBT_VERSION = 'version_number' ]
变体语法¶
执行保存在具有指定工作区名称的工作区中的 dbt 项目。运行此命令变体的用户必须为该工作区的拥有者。
EXECUTE DBT PROJECT [ IF EXISTS ] [ FROM WORKSPACE <name> ]
[ ARGS = '[ <dbt_command> ] [ --<dbt_cli_option> <option_value_1> [ ... ] [ ... ] ]' ]
[ DBT_VERSION = 'version_number' ]
[ PROJECT_ROOT = '<subdirectory_path>' ]
必填参数¶
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
runcommand executes by default.默认:无值
DBT_VERSION = 'version_number'Specifies a version for the dbt Project.
Default: When you execute a dbt project, the system uses the default version you specified when creating the dbt project. If none was specified, the system uses
1.9.4by default.For more information, see 支持的 dbt Projects on Snowflake 的 dbt Core 版本.
PROJECT_ROOT = 'subdirectory_path'Specifies the subdirectory path to the
dbt_project.ymlfile 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文件,则会发生错误。默认:无值
输出¶
列 |
描述 |
|---|---|
|
如果 dbt 项目成功执行,则为 |
|
dbt 项目执行返回的任何异常消息。如果 dbt 项目成功执行,则返回字符串 |
|
dbt 项目执行返回的标准输出。 |
|
输出存档的 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 文件中指定的 schema 和 database 执行操作,以及对 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';
使用指定目标和模型的显式测试命令¶
执行一个 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';
使用指定下游模型的显式运行命令¶
执行 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';
使用生产任务运行和测试 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';
Override the project's pinned version at execution time for testing or temporary needs¶
my_dbt_project is pinned to 1.9.4. This execution overrides the dbt project's default 1.9.4 version:
EXECUTE DBT PROJECT finance_analytics
DBT_VERSION = '1.10.15'