DBT 介绍¶
DBT 是一种转换工作流程,能帮助我们完成数据工程以及数据科学的很多工作,同时产生更高质量的结果。它支持我们模块化和集中化分析代码,同时还为数据团队提供软件工程工作流程中常见的护栏。在将查询安全部署到生产环境之前,通过监控和可视性,协作处理数据模型、对它们进行版本控制、测试和记录您的查询。
DBT 针对数据平台编译并运行分析代码,使团队能够在指标、见解和业务定义的单一事实来源上进行协作。这种单一事实来源与为数据定义测试的能力相结合,可以减少逻辑变化时的错误,并在出现问题时发出警报。
在 DBT Viewpoint 中详细了解为什么我们希望让分析师能够更像软件工程师一样工作。加入 dbt 社区,了解世界各地的其他数据从业者如何使用 dbt。
1. DBT 产品¶
通过 DBT 可以按照版本控制、模块化、可移植性、CI/CD 和文档等软件工程最佳实践的方式快速协作地转换数据,并部署分析代码。这意味着数据团队中熟悉 SQL 的任何人都可以安全地为生产级数据管道做出贡献。
1.1 DBT Cloud¶
DBT Cloud 提供最快、最可靠且可扩展的 DBT 部署方式,允许数据团队通过基于 Web 的用户界面使用单一、完全托管的服务来开发、测试、调度和调查数据模型,从而优化数据转换。如果你是一个开发者,DBT 提供了免费的开发者计划,。读者可以先体验一番。
1.2 DBT Core¶
DBT 同样提供了开源版本的 DBT Core,使数据从业者能够转换数据,这非常适合手动设置 DBT 并在本地维护它的用户。我们可以通过命令行安装 dbt Core。
2. 使用 DBT 优化工作流程¶
- DBT 通过事务管理、删除表和管理架构更改,避免编写样板 DML 和 DDL。我们仅需要使用 SQL
SELECT
语句或 PythonDataFrame
编写业务逻辑,返回您需要的数据集,整个过程 dbt 会负责底层实现。 - 构建可在后续工作中引用的可重用或模块化数据模型,而不是每次分析都从原始数据开始。
- 显著减少查询运行时间:利用元数据查找我们想要优化的长时间运行的模型,以及增量模型的使用,这一切在 DBT 中配置和使用都非常简单。
- 利用宏、挂钩和包管理来编写 Dryer 代码。
3. DBT 提供更可靠的分析¶
- 不再复制和粘贴 SQL,因为在逻辑更改时这可能会导致错误。相反,构建可重用的数据模型,并将其纳入后续模型和分析中。更改模型一次,该更改将传播到其所有依赖项。
- 发布特定数据模型的规范版本,封装所有复杂的业务逻辑。该模型之上的所有分析都将包含相同的业务逻辑,而无需重新实现它。
- 使用成熟的源代码控制流程,例如分支、拉取请求和代码审查。
- 对基础数据快速轻松地编写数据质量测试,许多分析错误是由数据中的边缘情况引起的,适当的测试可以帮助分析师发现并处理这些边缘情况。
4. DBT 力量¶
作为 DBT 用户,我们的主要重点将是编写反映核心业务逻辑的模型(选择查询),而无需编写样板代码来创建表和视图,或定义模型的执行顺序。相反,DBT 会为我们将这些模型转换为仓库中的对象。
特性 | 描述 |
---|---|
处理样板代码以将查询具体化为关系 | 创建的每个模型,我们可以轻松配置具体化。具现代表所选择查询的构建策略,而其背后的代码则是健壮的样板 SQL,它将我们的选择查询包装在语句中以创建新的或更新现有的关系。 |
使用代码编译器 | SQL 文件可以包含 Jinja 语法,这是一种轻量级模板语言。在 SQL 中使用 Jinja 提供了一种在查询中使用控制结构的方法。例如,if 语句和 for 循环。此外,它还允许通过 宏(macros ) 共享重复的 SQL。 |
确定模型执行的顺序 | 通常在转换数据时,采用 分阶段 方法是非常有意义的。DBT 提供了一种通过 ref 函数分阶段实现转换的机制。我们可以从另一个模型中进行选择,而不是从仓库中的现有表和视图中进行选择。 |
记录 DBT 项目 | 在 DBT Cloud 中,我们可以在 DBT 项目运行时自动生成文档。DBT 提供了数据模型编写、版本控制和共享文档的机制。我们可以为每个模型和字段编写描述(以纯文本或降价形式)。 |
测试模型 | 测试提供了一种通过对模型生成的结果进行断言来提高每个模型中 SQL 完整性的方法,单击按钮或使用 DBT Cloud IDE 命令栏即可构建、测试和运行您的项目。 |
管理包 | DBT 自带一个包管理器,允许分析人员使用和发布 DBT 代码的公共和私有存储库,然后其他人可以引用这些代码。 |
加载种子文件 | 通常在分析中,原始值需要映射为更具可读性的值(例如,将国家/地区代码转换为国家/地区名称)或通过静态或不经常更改的数据进行丰富。这些数据源(称为种子文件)可以在项目中另存为 CSV 文件,并使用种子命令加载到数据仓库中。 |
快照数据 | 通常,数据源中的记录是可变的,因为它们会随着时间的推移而变化。如果重建历史值,这在分析中可能很难处理。DBT 提供了一种通过使用快照来对某个时间点的原始数据进行快照的机制。 |