EXECUTE DBT PROJECT¶
使用指定的 dbt 命令和命令行选项,在 Snowflake 工作区中执行指定的 dbt 项目对象 或 dbt 项目。
语法¶
执行具有指定名称的 dbt 项目对象。
EXECUTE DBT PROJECT [ IF EXISTS ] <name>
[ ARGS = '[ <dbt_command> ] [ --<dbt_cli_option> <option_value_1> [ ... ] ] [ ... ]' ]
[ PROJECT_ROOT = '<subdirectory_path>' ]
变体语法¶
执行保存在具有指定工作区名称的工作区中的 dbt 项目。运行此命令变体的用户必须为该工作区的拥有者。
EXECUTE DBT PROJECT [ IF EXISTS ] [ FROM WORKSPACE <name> ]
[ ARGS = '[ <dbt_command> ] [ --<dbt_cli_option> <option_value_1> [ ... ] [ ... ] ]' ]
[ 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 [ ... ] [ ... ] ]'
指定在执行 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
文件,则会发生错误。默认:无值
输出¶
列 |
描述 |
---|---|
|
如果 dbt 项目成功执行,则为 |
|
dbt 项目执行返回的任何异常消息。如果 dbt 项目成功执行,则返回字符串 |
|
dbt 项目执行返回的标准输出。 |
|
输出存档的 URL,其中包含 dbt 项目执行的输出文件。这包括 dbt 写入 |
访问控制要求¶
用于执行此 SQL 命令的 角色 必须至少具有以下 一项 权限:
权限 |
对象 |
---|---|
USAGE |
dbt 项目 |
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
有关对 安全对象 执行 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 项目对象定义中的默认运行和 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';
使用生产任务运行和测试 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';