作业的 dbt 任务

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

Important

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

Requirements

运行方式 字段中配置的主体必须具有:

  • 可以在运行 dbt 生成的 SQL 的 SQL 仓库上使用。
  • dbt 模型所需的 Unity Catalog 权限。 例如,在目标目录和架构上为 USE CATALOGUSE SCHEMA,而在模型读取和写入的对象上为 SELECTMODIFY

配置 dbt 任务

通过以下操作,在作业界面的dbt选项卡中添加任务:

  1. 单击 “加号”图标。添加任务

  2. “任务名称 ”字段中输入名称。

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

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

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

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

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

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

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

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

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

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

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

    如果使用 Serverless 计算,请使用“环境和库”字段选择、编辑或添加新环境。 请参阅 配置无服务器环境

    对于所有其他计算配置,“依赖库” 字段会默认填充为。 删除此设置,然后点击 加号图标添加一个 PyPi 库以固定其版本。

    注释

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

  11. (可选)若要配置重试、运行持续时间或流式积压工作阈值或通知,请参阅 “高级任务设置”。

  12. 单击“保存任务”。

若要编辑、克隆、禁用或删除此任务,请参阅 Lakeflow 作业中的配置和编辑任务

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}}"}'

其他资源

  • 若要调试 dbt 生成的 SQL,请使用 SQL 仓库查询历史记录。 请参阅查询历史记录