数据转换是现代数据分析的支柱,dbt已经成为这个领域的关键角色。
dbt source
命令是dbt命令体系中重要的一个,它让用户无缝管理原始数据表引用。本文深入讲解该命令的详细用法,确保你能力利用其完整潜能。
dbt source 概述
DBT source 表示数据仓库中的原始数据表,是DBT转换的基础数据源。dbt source不是直接引用这些表,而是提供了一种抽象,增强了可维护性和清晰度。通过将表声明为源,可以将其标记为转换的可信基础,从而启用数据新鲜度检查等功能。在业务上下文中,源可以表示原始销售数据、客户交易数据或库存数据。
dbt source 命令设计用于管理基础数据源,它的主要子命令 dbt source freshness
,可以检查原始数据表的新鲜度,确保数据是最新的、可靠的。
案例实战
在分析系统中,源数据是直接来自业务系统的原始的、未处理的信息。例如,对于家电子商务企业,那么源数据可能是原始销售交易数据、原始客户列表和原始历史库存数据。使用dbt source
可以创建对这些表的引用,从而简化转换过程。
下面介绍如何使用 dbt source freshness
命令,首先需要增加 loaded_at_field
字段至 sources.yaml 文件。下面示例来自源数据的两张表:subscriptions 和 customers ,两者都有字段 _synced_at ,表示数据同步时间。设置数据新鲜度警告条件:超过2天警告;报错条件;超过7天报错。
sources:- name: rawdatabase: analytics_dbschema: raw freshness:warn_after: {count: 2, period: day}error_after: {count: 7, period: day}loaded_at_field: _synced_attables:- name: subscriptions- name: customers
简要解释:
- schema 可选,如果没有配置则为name的值,表示来自哪个schema
- database表示数据仓库,和 profiles 中的数据库对应
- sources.yaml 可以配置多个,通常每个模块主题可以共用source配置
- loaded_at_field 字段指定
新鲜度检查
假如你想确保你的销售数据是最新的,至少每天要检查一次;可以使用下面命令:
dbt source freshness
如果任何源表没有按照指定的新鲜度配置更新,dbt将引发警告或错误。在上面的例子中,如果数据是3天前的,我们将得到一个警告,因为warn_after阈值被设置为2天。
配置新鲜度输出
缺省情况下,新鲜度信息保存在 target/sources.json
文件中,可以通过下面命令选项进行自定义:
dbt source freshness --output target/my_custom_path.json
dbt source 高级用法Refactor your way to Success: A practical guide to dbt Core code Optimization
As all Data Engineers know, sometimes you need to move fast and get things done quickly. While this “quick and dirty” approach might be…
如果仅想检查特定表的新鲜度,可以使用 --select
或 --exclude
选项。下面命令仅检查 raw.customers 表的新鲜度:
dbt source freshness --select source:raw.customers
理解数据血缘关系
要理解业务,首先知道数据来自那里至关重要。使用 {{ source() }}
宏函数,可以定义血缘关系。下面示例引用raw.customers表:
select customer_id, customer_name, created_at
from {{ source('raw', 'customers') }}
大多数情况下,在staging模型中从每个源表中选择业务需要的字段,因此每个源都有自己的staging模型文件。这样就可以从原表中选择需要的字段,并统一在staging模型中处理重命名或转换数据等非业务性转换逻辑。
通常dbt模型遵循数仓理念,采用分层方式组织。source 表示贴源数据; stage 表示暂存区,处理格式转换、命名规范等非业务逻辑;dw 层定义分析模型,如维度模型,包括事实表、维度表、公共维度表等。mart层面向应用提供数据,通常为整合汇总的数据,如宽表,支持业务查询、OLAP、数据分发等场景。
测试源
为了确保数据质量,我们可以源配置文件中定义测试。举例,为了确保每个客户有不重复的编号:
version: 2sources:- name: stripetables:- name: customerstests:- unique:column_name: customer_id
使用dbt source 价值
- 数据一致性: 确保你的分析是基于可靠的、一致的数据
- 开发效率: 通过引用标准化数据避免重写转换逻辑
- 新鲜度监控: 确保您的业务决策是基于最新的数据
最佳实践
- 保持更新: 源数据可能会更改。定期运行dbt源新鲜度,避免数据更新中断。
- 定期检查: 定时执行新鲜度命令,保证数据质量,质量检查可以提前暴露问题。
总结
DBT sources 是DBT库中的一个强大工具,特别是在对业务数据的及时性和准确性有要求的场景中。通过掌握dbt源新鲜度命令并正确设置源,可以确保为分析项目奠定坚实的基础。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。