作业的 dbt 任务

使用 dbt 任务在 Azure Databricks 上配置和运行 dbt 项目。

重要

当 dbt 任务运行时,Databricks 会为在“运行方式”字段中配置的主体注入 DBT_ACCESS_TOKEN

配置 dbt 任务

通过执行以下操作,从作业 UI 中的“任务”选项卡添加 dbt 任务:

  1. 在“类型”下拉菜单中,选择“dbt”。

  2. 在“源”下拉菜单中,可以选择“工作区”以使用位于 Azure Databricks 工作区文件夹中的 dbt 项目,或选择“Git 提供程序”以使用位于远程 Git 存储库中的项目

    • 如果选择“工作区”,请使用提供的文件导航器来选择“项目目录”

    • 如果选择“Git 提供程序”,请单击“编辑”以输入项目存储库的 Git 信息。 请参阅将 Git 与作业配合使用

      如果项目不在存储库的根目录中,请使用“项目目录”字段来指定其路径。

  3. “dbt 命令”文本框会默认使用命令 dbt deps、dbt seed 和 dbt run。 提供的命令将按顺序运行。 根据需要为工作流添加、移除或编辑这些字段。 请参阅什么是 dbt 命令?

  4. 在“SQL 仓库”中,选择要运行 dbt 生成的 SQL 的 SQL 仓库。 “SQL 仓库”下拉菜单仅显示无服务器和专业 SQL 仓库。

  5. 指定“仓库目录”。 如果未设置,则将使用工作区的默认值。

  6. 指定“仓库架构”。 默认情况下,使用架构 default

  7. 选择“dbt CLI 计算”以运行 dbt Core。 Databricks 建议对使用单节点群集配置的作业或经典作业计算使用无服务器计算。

  8. 指定任务的 dbt-databricks 版本。

    如果使用 Serverless 计算,请使用“环境和库”字段选择、编辑或添加新环境。 请参阅安装笔记本依赖项

    对于所有其他计算配置,“依赖库”字段默认会填充到 dbt-databricks>=1.0.0,<2.0.0 字段。 删除此设置并“+ 添加” PyPi 库以固定版本。

    注意

    Databricks 建议将 dbt 任务固定到 dbt-databricks 包的特定版本,以确保相同版本用于开发和生产运行。 Databricks 建议使用 dbt-databricks 包的 1.6.0 或更高版本。

  9. 单击“创建任务”。

什么是 dbt 命令?

使用 dbt 命令字段可以指定要使用 dbt 命令行接口 (CLI) 运行的命令。 有关 dbt CLI 的完整详细信息,请参阅 dbt 文档

查看 dbt 文档,了解指定 dbt 版本支持的命令

将选项传递给 dbt 命令

使用 dbt 节点选择语法可以指定要在特定运行中包含或排除的资源。 runbuild 等命令接受标志,包括 --select--exclude。 有关完整说明,请参阅 dbt 语法概述文档

其他配置标志用于控制 dbt 如何运行项目。 有关可用标志列表,请参阅官方 dbt 文档中的“命令行选项”列。

某些标志会使用位置参数。 某些标志参数是字符串。 有关示例和说明,请参阅 dbt 文档。

将变量传递给 dbt 命令

使用 --vars 标志将静态或动态值传递给 dbt 命令字段中的命令。

将使用单引号分隔的 JSON 传递给了 --vars。 JSON 中的所有键和值都必须用双引号分隔,如下例所示:

dbt run --vars '{"volume_path": "/Volumes/path/to/data", "date": "2024/08/16"}'

参数化 dbt 命令示例

使用 dbt 时,可以引用任务值、作业参数和动态作业参数。 在命令运行之前,相关值将在“dbt 命令”字段中替换为纯文本。 有关在任务之间传递值或引用作业元数据的信息,请参阅参数化作业

这些示例假定已配置了以下作业参数:

参数名称 参数值
volume_path /Volumes/path/to/data
table_name my_table
select_clause --select "tag:nightly"
dbt_refresh --full-refresh

以下示例演示了引用这些参数的有效方法:

dbt run '{"volume_path": "{{job.parameters.volume_path}}"}'
dbt run --select "{{job.parameters.table_name}}"
dbt run {{job.parameters.select_clause}}
dbt run {{job.parameters.dbt_refresh}}
dbt run '{"volume_path": "{{job.parameters.volume_path}}"}' {{job.parameters.dbt_refresh}}

还可以引用动态参数和任务值,如以下示例所示:

dbt run --vars '{"date": "{{job.start_time.iso_date}}"}'
dbt run --vars '{"sales_count": "{{tasks.sales_task.values.sales_count}}"}'