1. 课程导入
欢迎进入《dbt金融数据测试与文档治理实战》。在金融行业,数据不仅是资产,更是监管对象。一笔交易金额的偏差、一个客户风险等级的错误映射,都可能触发合规风险。本课程不讲泛泛的dbt入门,而是聚焦一个核心命题:如何用dbt把金融数据的“可信度”工程化、可审计化。本章作为导入,先厘清dbt在金融数据治理版图中的位置,明确学习目标,搭建整体课程框架,并完成实战环境准备。
一、核心原理:dbt在金融数据治理中的定位
传统数据治理常被理解为“制度+流程+人工核对”,而dbt带来的改变是:把治理规则下沉到数据转换层,用代码表达、用测试验证、用文档沉淀。在金融场景中,dbt处于“数据源”与“数据应用”之间的建模与治理中枢位置。它不负责抽取(Extract)和加载(Load),但负责转换(Transform)环节的可测试、可文档化、可版本化。
具体而言,dbt在金融数据治理中承担四类角色:
- 数据质量守门员:通过schema测试、数据测试、自定义测试,拦截主键重复、空值、枚举越界、金额为负等异常。
- 口径一致性引擎:将监管口径、财务口径、风控口径固化为模型与宏,避免“同名不同义”。
- 血缘与影响分析器:通过ref()和source()自动生成DAG,回答“改这个字段会影响哪些报表”。
- 文档与审计载体:模型描述、字段说明、测试结果、运行日志共同构成可追溯的审计证据链。
关键认知:dbt不是“另一个ETL工具”,而是金融数据治理的控制平面。它让治理从“事后检查”前移到“构建时约束”,从“文档孤岛”变为“代码即文档”。
二、方法流程:从治理需求到dbt落地的四步法
金融数据治理不是“先建平台再想规则”,而是从监管要求和业务痛点出发,反向设计dbt资产。建议遵循以下四步流程:
- 识别治理对象:梳理核心报表、监管指标、风控模型所依赖的关键字段,标记其口径来源与敏感级别。
- 定义测试策略:对每个关键字段确定测试类型(唯一、非空、枚举、范围、自定义SQL),并设定严重级别(error/warn)。
- 构建模型与文档:用staging层做清洗与标准化,用marts层做口径聚合,同步编写schema.yml描述与测试。
- 持续运行与审计:通过dbt test、dbt docs generate、dbt build形成闭环,保留每次运行日志作为审计证据。
以下是一个典型的schema.yml配置片段,展示了测试与文档如何共存于同一文件:
version: 2
models:
- name: stg_transactions
description: "交易流水标准化层,来源于核心系统"
columns:
- name: transaction_id
description: "交易唯一标识"
tests:
- unique
- not_null
- name: amount
description: "交易金额,单位:元"
tests:
- not_null
- dbt_utils.accepted_range:
min_value: 0
severity: error
- name: status
description: "交易状态"
tests:
- accepted_values:
values: ['success', 'failed', 'pending']
三、案例/场景:一个监管报送口径的治理实例
某银行需向监管报送“小微企业贷款余额”,业务口径为:贷款五级分类为正常或关注、企业规模为小微、币种为人民币的贷款本金余额。过去该指标由多个团队分别用SQL计算,导致报送值与内部报表不一致。
引入dbt后,治理动作如下:
- 在staging层建立
stg_loans,统一字段命名与类型。 - 在marts层建立
fct_small_micro_loan_balance,将口径固化为模型逻辑。 - 为
loan_class、enterprise_scale、currency添加accepted_values测试,防止枚举值漂移。 - 为
balance添加not_null与accepted_range测试,防止负值或空值。 - 在schema.yml中写明监管口径来源与责任人,dbt docs自动生成可检索文档。
结果:报送口径唯一化,测试拦截了3次枚举值异常,审计时可直接导出文档与测试记录。
提示:金融场景中,测试的severity设置很关键。涉及监管报送的字段建议设为error,阻断构建;仅用于内部参考的字段可设为warn,记录但不阻断。
四、误区/复盘:初学者常见的三个认知偏差
| 误区 | 表现 | 纠正 |
|---|---|---|
| 把dbt当纯ETL工具 | 只关注模型跑通,不写测试和文档 | dbt的核心价值在治理层,测试与文档是必选项 |
| 测试越多越好 | 对所有字段加全量测试,构建缓慢 | 按风险分级,关键字段重点测试,非关键字段抽样 |
| 文档写完就过时 | schema.yml长期不更新,与模型脱节 | 将文档更新纳入代码评审,用dbt docs generate验证 |
警告:在金融生产环境中,切勿跳过测试直接部署模型。一次未拦截的空值或重复主键,可能导致监管报送错误,带来合规风险。
五、整体课程框架与实战环境准备
本课程共30章,分为五个模块:
- 模块一:基础与定位(第1-4章)——dbt核心概念、金融治理定位、环境搭建、项目结构。
- 模块二:数据测试体系(第5-12章)——schema测试、数据测试、自定义测试、测试分级与告警。
- 模块三:文档治理(第13-18章)——schema.yml编写、docs生成、字段级血缘、文档评审流程。
- 模块四:进阶治理(第19-25章)——快照、宏、包管理、CI/CD集成、权限与安全。
- 模块五:综合实战(第26-30章)——监管报送、风控指标、财务口径三个完整案例与复盘。
实战环境准备清单:
- Python 3.9+ 与 pip
- dbt-core 与 dbt-postgres(或dbt-snowflake、dbt-bigquery,按实际选择)
- 一个可用的数据库实例(本地PostgreSQL或云数仓)
- Git 与代码编辑器(VS Code + dbt Power User插件)
- 示例金融数据集(课程提供,含交易、贷款、客户三张表)
安装命令示例:
pip install dbt-core dbt-postgres
dbt --version
dbt init fin_dbt_project
cd fin_dbt_project
dbt debug
当dbt debug显示“All checks passed”时,环境即准备就绪。接下来,我们将从dbt项目结构开始,逐步构建金融数据治理的测试与文档体系。