数据血缘
概述
数据血缘(Data Lineage)记录数据从产生、加工到使用的流转关系,是数据治理的基石:字段级血缘精确到列,SQL Parser 是实现血缘的核心技术,Spark/Flink/Hive 通过钩子自动采集。本文讲透血缘体系。
一、血缘是什么
血缘 = 数据流转关系:
表 A → 表 B(表级)
列 a1 → 列 b2(字段级)
作业 → 表(作业级)| 层级 | 说明 |
|---|---|
| 表级 | 表到表 |
| 字段级 | 列到列 |
| 作业级 | 任务参与 |
| 端到端 | 源 → 应用 |
血缘价值:
影响分析(改表怕影响谁)
溯源(数据从哪来)
治理(下线/质量)二、血缘类型
2.1 按粒度
| 类型 | 说明 |
|---|---|
| 表级 | 粗粒度 |
| 字段级 | 精确到列 |
| 指标级 | 指标口径 |
2.2 按方向
正向:上游 → 下游(影响分析)
反向:下游 → 上游(溯源)2.3 按来源
物理血缘:实际执行流转
逻辑血缘:SQL 推导三、SQL Parser 解析
3.1 原理
解析 SQL 得语法树(AST):
识别 SELECT 来源列
映射到目标列
生成血缘关系示例:
INSERT INTO dws.gmv
SELECT order_id, SUM(amount)
FROM ods.orders
GROUP BY order_id;
血缘:
ods.orders.order_id → dws.gmv.order_id
ods.orders.amount → dws.gmv.SUM(amount)3.2 解析流程
1. 词法/语法解析 → AST
2. 识别 SELECT 项
3. 识别 FROM/JOIN 来源
4. 处理函数/表达式
5. 关联目标表列
6. 生成血缘边3.3 技术实现
| 组件 | 说明 |
|---|---|
| ANTLR | 语法解析 |
| Calcite | SQL 解析框架 |
| 自研 Parser | 定制 |
复杂情况:
子查询、CTE、Join、函数
CASE WHEN、窗口函数
需逐步推导四、Hive 血缘
4.1 采集方式
| 方式 | 说明 |
|---|---|
| Hook | Hive Hook 上报 |
| 解析 | 执行日志解析 |
| Atlas 集成 | 内置 Hook |
Hive Hook:
DDL/DML 执行时上报:
建表/查询 → 血缘实体
Atlas 存储展示4.2 血缘来源
INSERT ... SELECT:来源明确
覆盖/追加 → 目标
CREATE VIEW AS:视图血缘五、Spark 血缘
5.1 采集方式
| 方式 | 说明 |
|---|---|
| Spark Listener | 作业监听 |
| 代码解析 | 静态分析 |
| Hook 集成 | Atlas/DataHub |
Spark Listener:
监听作业提交/完成
捕获 DataFrame 读写:
读表 → 写表 → 血缘5.2 血缘获取
DataFrame 血缘:
从 Spark SQL 执行计划
提取输入输出关系
字段级推导Spark 血缘信息:
输入表/列
输出表/列
作业信息六、Flink 血缘
6.1 采集方式
Flink 作业:
SQL 作业 → 解析 DDL/DML
采集 Source/Sink 表关系| 方式 | 说明 |
|---|---|
| SQL 解析 | 静态血缘 |
| 运行时 | 执行计划 |
| 集成 | 上报平台 |
示例:
INSERT INTO dws
SELECT ... FROM kafka_ods;
→ Kafka topic → dws 表6.2 血缘特点
实时链路血缘:
源(Kafka/DB)→ 中间 → 目标
端到端七、血缘存储与查询
7.1 存储
| 存储 | 说明 |
|---|---|
| 图数据库 | 血缘图(Neo4j) |
| 关系库 | 边表 |
| 索引 | 检索 |
图结构:
节点 = 表/字段
边 = 流转关系7.2 查询应用
影响分析:
查某表所有下游(正向遍历)
溯源:
查某表所有上游(反向遍历)血缘查询:
上游/下游 N 层
字段级路径
展示血缘图八、血缘质量与治理
8.1 质量
| 问题 | 处理 |
|---|---|
| 采集不全 | Hook 全覆盖 |
| 解析不准 | 复杂 SQL 校验 |
| 断链 | 未采集作业 |
| 过期 | 定期刷新 |
8.2 治理应用
| 应用 | 说明 |
|---|---|
| 影响评估 | 变更前分析 |
| 下线审批 | 依赖检查 |
| 数据找人 | 责任定位 |
| 指标溯源 | 口径追溯 |
九、血缘体系建设
1. 采集:Hook/Parser 全覆盖
2. 存储:图存储
3. 展示:血缘图
4. 应用:影响/溯源/治理
5. 运营:质量校验| 阶段 | 里程碑 |
|---|---|
| 一期 | Hive 表级血缘 |
| 二期 | Spark/Flink + 字段级 |
| 三期 | 应用治理 |
常见问题速查
| 问题 | 要点 |
|---|---|
| 血缘是什么 | 数据流转关系 |
| SQL Parser | AST 推导 |
| Hive 怎么采 | Hook |
| Spark 怎么采 | Listener |
| Flink 怎么采 | SQL 解析 |
| 存哪 | 图存储 |
| 有什么用 | 影响/溯源 |