1. 课程导入

欢迎进入《dbt金融数据测试与文档治理实战》。在金融行业,数据不仅是资产,更是监管对象。一笔交易金额的偏差、一个客户风险等级的错误映射,都可能触发合规风险。本课程不讲泛泛的dbt入门,而是聚焦一个核心命题:如何用dbt把金融数据的“可信度”工程化、可审计化。本章作为导入,先厘清dbt在金融数据治理版图中的位置,明确学习目标,搭建整体课程框架,并完成实战环境准备。

一、核心原理:dbt在金融数据治理中的定位

传统数据治理常被理解为“制度+流程+人工核对”,而dbt带来的改变是:把治理规则下沉到数据转换层,用代码表达、用测试验证、用文档沉淀。在金融场景中,dbt处于“数据源”与“数据应用”之间的建模与治理中枢位置。它不负责抽取(Extract)和加载(Load),但负责转换(Transform)环节的可测试、可文档化、可版本化。

具体而言,dbt在金融数据治理中承担四类角色:

  • 数据质量守门员:通过schema测试、数据测试、自定义测试,拦截主键重复、空值、枚举越界、金额为负等异常。
  • 口径一致性引擎:将监管口径、财务口径、风控口径固化为模型与宏,避免“同名不同义”。
  • 血缘与影响分析器:通过ref()和source()自动生成DAG,回答“改这个字段会影响哪些报表”。
  • 文档与审计载体:模型描述、字段说明、测试结果、运行日志共同构成可追溯的审计证据链。

关键认知:dbt不是“另一个ETL工具”,而是金融数据治理的控制平面。它让治理从“事后检查”前移到“构建时约束”,从“文档孤岛”变为“代码即文档”。

dbt在金融数据治理中的中枢定位 数据源层 核心系统 / 信贷 / 行情 监管报送 / 外部数据 dbt 治理中枢 测试 · 文档 · 血缘 口径 · 版本 · 审计 模型 · 宏 · 快照 数据应用层 监管报表 / 风控看板 财务分析 / 客户画像 治理能力输出 数据测试 唯一性 / 非空 枚举 / 范围 / 自定义 文档治理 模型描述 / 字段说明 自动生成 / 版本追踪 血缘分析 DAG / 影响分析 上下游追溯 审计证据 运行日志 / 测试结果 变更记录 / 快照

二、方法流程:从治理需求到dbt落地的四步法

金融数据治理不是“先建平台再想规则”,而是从监管要求和业务痛点出发,反向设计dbt资产。建议遵循以下四步流程:

  1. 识别治理对象:梳理核心报表、监管指标、风控模型所依赖的关键字段,标记其口径来源与敏感级别。
  2. 定义测试策略:对每个关键字段确定测试类型(唯一、非空、枚举、范围、自定义SQL),并设定严重级别(error/warn)。
  3. 构建模型与文档:用staging层做清洗与标准化,用marts层做口径聚合,同步编写schema.yml描述与测试。
  4. 持续运行与审计:通过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项目结构开始,逐步构建金融数据治理的测试与文档体系。