2. 基础知识
在风险报告场景中,我们经常遇到一个尖锐的问题:报表上某个风险指标突然异常,究竟是数据源出错、加工逻辑变更,还是口径调整?要回答这个问题,必须建立一套从“数据从哪来、经过什么加工、最终落到哪”的完整认知体系。本章围绕四个核心概念展开:数据血缘、字段级追溯、元数据管理与数据地图,它们是后续所有实战操作的理论地基。
一、核心概念与相互关系
数据血缘(Data Lineage)描述数据在系统间的流转路径,回答“这张表的数据来自哪些上游、又流向了哪些下游”。它通常以表或任务为粒度,呈现的是宏观流向。
字段级追溯(Column-Level Lineage)是血缘的精细化形态,把追溯粒度下沉到字段。它回答的是“报表中‘不良贷款率’这个字段,具体由上游哪张表的哪个字段、经过什么表达式计算而来”。在风险报告中,监管口径往往精确到字段,因此字段级追溯是合规审计与问题定位的关键能力。
元数据管理(Metadata Management)是对“描述数据的数据”进行采集、存储、维护和应用的过程。元数据分为技术元数据(表结构、字段类型、分区、存储路径)、业务元数据(指标定义、口径说明、责任人)和管理元数据(权限、生命周期、血缘关系)。血缘本身就是元数据的一种重要类型。
数据地图(Data Map)是元数据的可视化门户,把分散的表、字段、任务、指标、责任人组织成可检索、可导航的图谱,让使用者像看地图一样快速定位数据资产。
二、核心原理:血缘是如何被采集出来的
血缘并非人工绘制,而是通过解析与埋点自动生成。常见采集方式有三类:
- SQL解析:解析ETL脚本、视图定义、存储过程,提取源表与目标表的映射关系,进一步解析SELECT子句得到字段级映射。
- 任务调度埋点:从调度系统(如Airflow、DolphinScheduler)读取任务依赖,形成任务级血缘。
- 运行时采集:通过查询日志、执行计划或数据访问代理,捕获真实发生的读写关系。
字段级追溯的难点在于表达式解析。例如下面这段SQL,需要识别出目标字段npl_ratio同时依赖两个上游字段:
INSERT INTO risk_report.dws_asset_quality
SELECT
stat_date,
branch_code,
SUM(npl_balance) / SUM(loan_balance) AS npl_ratio
FROM risk_dw.dwd_loan_detail
GROUP BY stat_date, branch_code;
解析结果应记录:dws_asset_quality.npl_ratio ← dwd_loan_detail.npl_balance 与 dwd_loan_detail.loan_balance,并保留计算表达式。当口径变更时,系统即可沿这条边反向影响分析。
三、方法流程:从元数据采集到数据地图呈现
落地一套可用的血缘与追溯体系,通常遵循以下流程:
- 元数据采集:接入数据库、数仓、调度系统、BI工具,抽取表结构、字段、任务、报表定义。
- 血缘解析:对SQL与任务依赖进行解析,生成表级与字段级血缘边。
- 元数据存储:以图数据库或关系模型存储节点与边,保留版本与时间戳。
- 影响分析:支持正向(下游影响)与反向(上游溯源)查询。
- 数据地图发布:提供搜索、图谱浏览、字段详情、责任人展示。
| 能力维度 | 表级血缘 | 字段级追溯 | 数据地图 |
|---|---|---|---|
| 追溯粒度 | 表/任务 | 字段/表达式 | 资产目录 |
| 典型问题 | 这张表从哪来 | 这个指标怎么算的 | 数据在哪、找谁 |
| 主要用户 | 数据开发 | 风险分析师、审计 | 全员 |
| 关键价值 | 任务排障 | 口径合规、问题定位 | 资产发现与协作 |
四、案例场景:一次风险指标异常的追溯
某银行风险日报中“逾期90天以上贷款率”较前日上升0.8个百分点。分析师通过数据地图搜索该指标,进入字段详情页,看到其计算依赖dwd_loan_detail.overdue_days与dwd_loan_detail.loan_balance。沿字段级血缘反向追溯,发现上游任务在凌晨新增了一个过滤条件,导致部分正常贷款被排除,分母变小,指标被动升高。整个定位过程约十分钟,若没有字段级追溯,可能需要数小时人工排查。
五、误区与复盘
- 误区一:血缘一次性建设。血缘需随任务变更持续更新,否则会迅速失真。应建立变更触发重解析机制。
- 误区二:忽视业务元数据。只有技术字段而无指标口径与责任人,数据地图难以被业务用户使用。
- 误区三:解析失败即放弃。复杂存储过程、动态SQL解析率有限,应结合运行时采集与人工补录,形成混合血缘。
- 复盘要点:先保证关键风险指标的字段级追溯准确,再逐步扩展覆盖面;优先服务高频排障与审计场景。