想象有座“数据小镇”,镇上住着许多“数据居民”——每一张表、每个文件、每条特征都是居民。每位居民都有一本族谱:谁是他的祖先(上游源表)、他经历了怎样的“出生仪式”诞生(清洗、关联、汇总等变换)、他的子孙后代又是谁(下游消费方)。当一位居民“生病”时(数据出错),你可以顺着族谱向上找到致病的先祖;当先祖要“搬家”时(表结构变更),你可以提前通知所有子孙做好准备;当镇长来查户口时(合规审计),族谱就是最有力的身世证明。这本族谱,在数据世界里叫数据血缘。本文就用这份“数据族谱”贯穿始终,带你理解数据血缘是什么、由什么构成、如何可视化,以及它在影响分析、质量排查、合规审计与工程建设中如何发挥作用。

岗位关联

掌握数据血缘,你就能在数据问题爆发时像侦探一样快速定位元凶、在表结构变更时提前预警下游、在合规审计时拿出完整证据链——这是数据治理工程师、数据平台开发者和 AI 数据团队的核心基本功。

目录
  1. 可视化演示
  2. 血缘定义价值
  3. 核心构成要素
  4. 血缘图可视化
  5. 影响分析应用
  6. 质量排查追溯
  7. 合规审计追溯
  8. 血缘建设实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示数据血缘追踪体系:DAG血统图(来源→ETL→变换→消费数据流)、影响分析(上游变更向下游传播高亮)、字段级vs表级精度对比(精确追踪vs过度报警),通过模式切换理解数据溯源的治理价值。

本节配有交互动效(进入视口后自动加载,约 3KB)。

血缘DAG:数据流转有向无环图 数据节点:来源系统/ETL中间表/消费端 变换边:ETL算子连接输入与输出 lineage = DAG(sources, transforms, sinks) DAG结构保证无环路避免循环依赖

血缘定义价值

数据小镇最初只有几十口人,镇长靠脑袋就能记得谁家生了娃。可当订单表、用户表、销售日报、报表中心这些“居民”越来越多、关系越来越绕,镇长老王彻底糊涂了:销售日报说它来自订单明细,订单明细说它来自订单表,可谁说得清中间到底发生了什么?于是老王召集全镇开会,决定给每一位数据居民修一本“族谱”,把“谁生谁、怎么生、生在哪”全部记下来。这本族谱,就是数据血缘。

在数据治理体系中,数据血缘(Data Lineage)记录的正是数据从产生、加工、流转到最终消费的完整路径。它不像数据字典那样只描述“这个人长什么样”,而是关注“这个人从哪来、到哪去、一路上经历了什么”。有了血缘,数据问题排查、变更影响评估、合规审计就有了统一的证据来源,因此也被称为数据治理的基础能力。

从建模角度看,一份完整的血缘可以抽象成一张有向图。图中的节点是数据实体,边是数据流转关系。用数学语言表示,血缘图就是一个二元组:节点集合与边集合。

族谱修成那天,老王捧着厚厚一本书长舒一口气:以后谁再问“销售日报是谁家的孩子”,翻到那一页就清清楚楚。数据血缘,就是数据小镇的认祖归宗之书。

G=(V,E)\displaystyle G = (V, E)
V 是族谱上所有“人”,E 是“父子关系线”,G 就是整本族谱。
  1. 数据节点集合 VV 中每个元素是一张表、一个文件或一个字段,它们是血缘关系的参与者。
    V={v1,v2,…,vn}\displaystyle V = \{v_1, v_2, \ldots, v_n\}
  2. 血缘边集合 EE 中每条有向边记录一对“父子关系”的数据流转,方向就是从上游到下游。
    E={(vi,vj)∣vi∈V, vj∈V}\displaystyle E = \{(v_i, v_j) \mid v_i \in V,\ v_j \in V\}
  3. 完整图谱 GG 由节点集合和边集合共同构成,是可查询、可分析的血缘图谱。
    G=(V,E)\displaystyle G = (V, E)

核心构成要素

族谱光记“谁是谁的孩子”还不够。老王发现,镇上两个居民都叫“小明”,可一个是老张家的,一个是老李家的,得把“出生时间、出生方式、来自哪个家族”都写清楚才不会认错。于是族谱委员会规定:每一条血缘记录必须写清四件事——这孩子打哪来、怎么生的、生成了谁、什么时候生的。

在数据血缘里,这四个信息对应四个核心要素:来源系统 S、变换操作 O、目标数据 T、时间戳 t。来源系统告诉你上游数据来自哪张表、哪个业务库或哪条接口;变换操作记录数据经历了 SQL 查询、JOIN 关联、聚合汇总、字段筛选还是特征拼接;目标数据指向产物表或字段;时间戳则标记这次流转发生的具体时刻,是审计回溯的关键依据。缺少任何一项,血缘记录就像族谱少写了“出生地”一样,查证价值大打折扣。

把四个要素打包,一条血缘记录就可以写成四元组:

有了这四项,族谱上每一行都经得起推敲。老王翻着族谱说:来源、操作、目标、时间,这四样齐了,数据居民的“出生证明”才算完整。

L=(S,O,T,t)\displaystyle L = (S, O, T, t)
L 就像族谱里的一行字:“小小明于 2023-05-01 由老张家族经联姻仪式诞生”。
  1. 来源系统 SS 是数据产生的源头集合,通常用库名、表名或接口名标识。
    S={s1,s2,…,sm}\displaystyle S = \{s_1, s_2, \ldots, s_m\}
  2. 变换操作 OO 是本次流转经历的加工动作,包括关联、过滤、聚合、合并等。
    O={JOIN, FILTER, AGGREGATE, UNION, …}\displaystyle O = \{\mathrm{JOIN},\ \mathrm{FILTER},\ \mathrm{AGGREGATE},\ \mathrm{UNION},\ \ldots\}
  3. 目标数据 TT 表示变换产物,即新生成的数据集或字段。
    T\displaystyle T
  4. 时间戳 tt 是变换发生的时刻,如同族谱上的“出生时辰”,用于审计与回溯。
    t\displaystyle t

血缘图可视化

文字族谱翻起来太累。镇上画师小李自告奋勇:不如把族谱画成家族树!每个人画成一个圆圈,从祖先到后代拉一条线,谁是谁的上游、谁是谁的下游,一眼就能看明白。老王一看连连点头:这张图好,这叫一眼望到底。

数据血缘的可视化同样是这个思路:把血缘记录中的节点画成圆或方块,把血缘边画成有向箭头,就得到一张血缘图。血缘图通常是有向无环图(DAG),因为数据流转大体上是单向的,不会出现“表 A 生成表 B、表 B 又生成表 A”这种死循环(即便有,也应视为建模错误)。血缘图可以按表级、字段级、任务级分层展示,粒度越细,排查越精准。

血缘图最大的价值是能直接“算出影响范围”。从一个节点 v 出发,沿着箭头方向能到达的所有节点,就是 v 的完整下游。这个集合叫下游可达集合:

画师小李把家族树挂在镇中心广场,从此谁家有什么事,大家先看图再说话。对数据团队来说,血缘图就是每天的“作战地图”。

Down(v)={u∈V∣v⇝u}\displaystyle \mathrm{Down}(v) = \{u \in V \mid v \rightsquigarrow u\}
v 是家族树中的某位长辈,Down(v) 就是他从上往下数到的所有子孙后代。
  1. 可达关系从 v 出发,沿着血缘箭头走零步或多步能到达 u,记作一条可达路径。
    v⇝u\displaystyle v \rightsquigarrow u
  2. 下游集合收集所有被 v 影响的节点,每个节点都是 v 的“后代”。
    {u∈V∣v⇝u}\displaystyle \{u \in V \mid v \rightsquigarrow u\}
  3. 定义 Down(v)这就是 v 的完整下游影响范围,是后续影响分析的基石。
    Down(v)={u∈V∣v⇝u}\displaystyle \mathrm{Down}(v) = \{u \in V \mid v \rightsquigarrow u\}

影响分析应用

老张家的祖宅要翻修了。按镇上的规矩,他先翻出族谱,把自家所有子孙的名字列出来,挨个打电话:“我家地基要动,你们这几天出行注意绕路。”这就是有族谱的好处——提前知道谁会受影响,就能提前做安排。

数据平台也是一样。分析师想给上游订单表加一个新的非空约束,如果不知道哪些下游依赖它,就可能让十几张报表和数据模型同时崩掉。血缘图上的影响分析,就是在变更发生之前,先计算变更节点波及的下游范围,并把影响清单发给相关责任人,让他们评估风险、准备预案。这种“变更影响分析”是数据治理中最常见的血缘应用之一。

影响程度可以用一个简单的数量指标来衡量:

老张打完电话,子孙们绕路照常生活,祖宅顺利翻修。数据变更也一样:血缘让你在“动土”之前就知道该通知谁,把一次灾难性事故变成一次平静的演练。

I(v)=∣Down(v)∣\displaystyle I(v) = |\mathrm{Down}(v)|
I(v) 就是“老张打电话通知的人数”——子孙越多,通知量越大,翻修的影响面越广。
  1. 下游集合v 的全部下游节点,即所有可能被这次变更波及的“后代”。
    Down(v)={u∈V∣v⇝u}\displaystyle \mathrm{Down}(v) = \{u \in V \mid v \rightsquigarrow u\}
  2. 集合大小统计影响节点总数,一个节点算一个“受影响居民”。
    ∣Down(v)∣\displaystyle |\mathrm{Down}(v)|
  3. 影响度量I(v) 越大,变更风险越高,越需要提前通知与预案。
    I(v)=∣Down(v)∣\displaystyle I(v) = |\mathrm{Down}(v)|

质量排查追溯

小镇突然流行一种奇怪的病:销售日报上的数字怎么算都不对。老李家的孩子发烧,王大夫不急着开药,而是先翻开族谱,从“患者”一路向上查祖宗——他发现病根不在患者本人,而在曾祖父“订单表”里混进来的几条脏数据,这些脏数据一代代传下来,把整个家族都带偏了。

数据质量排障也是同样的逻辑。一张报表或一个模型特征出问题时,如果逐层翻日志,效率极低、还可能漏掉隐藏依赖。血缘图允许我们从异常节点出发,沿着血缘边向上游回溯,逐层检查源表数据、清洗任务和调度配置,快速锁定真正的根因。

血缘还可以帮助我们理解质量问题是怎么“传染”的。如果把每个节点的质量刻画为一个分数 Q(v)(0 到 1),并给每条血缘边一个可靠性权重 w(0 到 1),那么下游节点的质量会随上游质量逐层传递而衰减:

王大夫顺着族谱找到曾祖父,治好了源头,全镇的怪病一夜消失。数据质量排查的精髓也是如此:不只是修好眼前这张表,而是要顺着血缘找到那个真正的“病根”。

Q(v)=∏u∈Par(v)Q(u)×wu→v\displaystyle Q(v) = \prod_{u \in \mathrm{Par}(v)} Q(u) \times w_{u \to v}
孩子的健康受所有直系长辈影响——任何一位上游祖先身体不好,孩子的质量分数就会跟着打折。
  1. 父节点集合v 的直接上游“父母”,即所有指向 v 的节点。
    Par(v)={u∈V∣(u,v)∈E}\displaystyle \mathrm{Par}(v) = \{u \in V \mid (u, v) \in E\}
  2. 累乘符号把每个父节点对 v 的质量贡献相乘,体现“一票拖累”的传染效应。
    ∏u∈Par(v)\displaystyle \prod_{u \in \mathrm{Par}(v)}
  3. 链路权重表示 u 到 v 这条血缘边的可靠程度,权重越低,传递损耗越大。
    wu→v∈[0,1]\displaystyle w_{u \to v} \in [0, 1]
  4. 质量传播一个上游质量差,下游质量就会明显下跌,血缘图让这种传染路径清晰可见。
    Q(v)=∏u∈Par(v)Q(u)×wu→v\displaystyle Q(v) = \prod_{u \in \mathrm{Par}(v)} Q(u) \times w_{u \to v}

合规审计追溯

镇长要查户口了。每户人家都得回答:你家孩子是什么时候、经由谁的手、以什么方式落户的?有族谱的人家翻一翻就能答上来;没有族谱的人家,支支吾吾半天也说不清。老王感叹:族谱不只是方便认亲,关键时候就是自证清白的底气。

在金融、医疗、政务这些强监管领域,审计人员会要求证明:某条敏感数据从采集、加工、使用到删除,全程都合规。数据血缘就是这套“数字户口本”:每一次加工、每一回读取、每一个权限变更,都被记录为一条审计证据。血缘图与操作日志结合,就形成一条不可断开的证据链,让审计方可以逐环节复核,也让数据责任界定有了客观依据。

对一条数据记录 r 的完整生命周期,可以用审计序列表示:

镇长查完户口,满意地点了点头。数据小镇的族谱不仅能认亲,还能在关键时刻证明每一位数据居民的“身世清白”——这就是血缘在合规审计中的价值。

A(r)={(ti, oi, ai, di)}i=1n\displaystyle A(r) = \{(t_i,\ o_i,\ a_i,\ d_i)\}_{i=1}^{n}
A(r) 就是某位居民的“完整人生档案”——在什么时间、做了什么动作、谁操作的、对象是谁,全部按时间排好。
  1. 审计四元组分别表示第 i 步的时间、动作、操作者和操作对象,四者缺一不可。
    (ti, oi, ai, di)\displaystyle (t_i,\ o_i,\ a_i,\ d_i)
  2. 序列下标表示按时间先后排列的 n 步操作,顺序就是证据链的“时间轴”。
    i=1,2,…,n\displaystyle i = 1, 2, \ldots, n
  3. 完整证据链把从采集到销毁的全程记录汇总,形成不可否认的审计依据。
    A(r)={(ti, oi, ai, di)}i=1n\displaystyle A(r) = \{(t_i,\ o_i,\ a_i,\ d_i)\}_{i=1}^{n}

血缘建设实践

修族谱不是一晚能完成的事。老王安排了三拨人:第一拨挨家挨户登记人口信息,第二拨把大家口中的亲缘关系整理核对,第三拨把族谱装订成册并定期修订。几年下来,族谱才真正成为小镇治理离不开的“基础设施”。数据血缘的建设,同样是这样一个系统工程。

具体来说分四步:第一步元数据采集,从数据目录、ETL 脚本、SQL 日志和调度系统里抓取表结构、作业依赖等原始信息;第二步血缘解析,通过解析 SQL 语句和调度依赖,提炼出数据节点之间的血缘边;第三步血缘存储,把解析出的血缘边存入图数据库或专用血缘仓库,供上层应用查询;第四步血缘应用,把图谱用于影响分析、质量排查、合规审计,形成治理闭环。这四步循环迭代,血缘体系才能越建越完整。

血缘建设得怎么样,要用覆盖率来衡量。覆盖率就是“已经采集到的血缘边”占“实际应该有的血缘边”的比例:

几年后,小镇的族谱已经厚厚一摞,但老王依然安排专人每月修订一次。数据血缘建设从来不是一次性的“抄家谱”,它像数据小镇的户籍制度一样,需要持续采集、持续校验、持续更新,才能让数据治理的根基越来越稳。

Coverage=∣Lcaptured∣∣Lactual∣\displaystyle \mathrm{Coverage} = \frac{|L_{\mathrm{captured}}|}{|L_{\mathrm{actual}}|}
像“族谱登记完整度”——已登记的关系数除以实际存在的亲缘关系总数,越接近 1,族谱越可靠。
  1. 已捕获血缘量系统当前成功解析到的血缘边数,即已经写进族谱的“关系行”。
    ∣Lcaptured∣\displaystyle |L_{\mathrm{captured}}|
  2. 实际血缘总量数据链路中真实存在的血缘边数,是评估完整度的基准。
    ∣Lactual∣\displaystyle |L_{\mathrm{actual}}|
  3. 覆盖率公式覆盖率持续接近 1 时,血缘体系才称得上完善,治理决策才有据可依。
    Coverage=∣Lcaptured∣∣Lactual∣\displaystyle \mathrm{Coverage} = \frac{|L_{\mathrm{captured}}|}{|L_{\mathrm{actual}}|}

AI 应用场景

数据质量排障:特征异常溯源

阶段:数据质量管理 / 特征工程

解决的问题:传统排障靠人工翻日志、逐层查数,耗时数小时且容易漏掉隐藏依赖;通过血缘图谱可从异常特征一路回溯至源头表,分钟级定位根因。

具体案例:推荐系统的“用户点击率”特征突然异常,数据工程师沿特征血缘图从特征库 → 标注表 → 日志解析表 → 埋点原始表逐层排查,发现埋点日志在夜间任务中因字段长度截断产生了脏数据。修复源头后重跑下游任务,特征指标恢复。

合规审计:全生命周期证据链

阶段:数据治理与合规

解决的问题:传统审计靠人工截屏、零星表格记录证据,链路容易断裂;血缘系统自动生成从采集到销毁的完整证据链,审计方逐环节复核即可。

具体案例:银行风控部门需要证明某客户的敏感信息在 30 天后被删除。血缘追踪器展示了从核心系统 → 数仓 → 特征库 → 删除任务的完整链路和时间戳,每一步操作者与动作都清晰可查,审计一次通过。

模型迭代:AI 特征血缘回溯

阶段:模型开发与监控

解决的问题:模型效果下降时,工程师往往难以区分是数据问题还是模型问题;特征血缘图把特征与原始表、加工逻辑的依赖关系显性化,帮助 ML 团队精准定位。

具体案例:信贷模型坏账率上升,ML 工程师查看特征血缘图,发现“收入”特征的上游新增了一张外部数据源表,该表数据分布漂移严重。团队及时下线该源表、回滚特征版本并重新训练,模型效果恢复。

Python 演示

python56 行
"""A lightweight data lineage tracker with downstream/upstream queries."""  class LineageGraph:    def __init__(self):        # node name -> list of downstream node names        self.downstream_edges = {}        # node name -> list of upstream node names        self.upstream_edges = {}     def add_edge(self, upstream, downstream):        self.downstream_edges.setdefault(upstream, []).append(downstream)        self.upstream_edges.setdefault(downstream, []).append(upstream)     def downstream(self, node):        """Return all nodes affected by changing the given node."""        result = []        stack = [node]        while stack:            current = stack.pop()            for nxt in self.downstream_edges.get(current, []):                if nxt not in result:                    result.append(nxt)                    stack.append(nxt)        return result     def upstream(self, node):        """Return all ancestor nodes that the given node depends on."""        result = []        stack = [node]        while stack:            current = stack.pop()            for prv in self.upstream_edges.get(current, []):                if prv not in result:                    result.append(prv)                    stack.append(prv)        return result  def main():    g = LineageGraph()    g.add_edge('orders', 'order_items')    g.add_edge('orders', 'users')    g.add_edge('order_items', 'user_dim')    g.add_edge('users', 'user_dim')    g.add_edge('user_dim', 'sales_daily')    g.add_edge('user_dim', 'user_profile')    g.add_edge('sales_daily', 'report_center')    g.add_edge('user_profile', 'report_center')     print('Downstream of [orders]:', g.downstream('orders'))    print('Upstream of [report_center]:', g.upstream('report_center'))  if __name__ == '__main__':    main()
目的:实现一个轻量数据血缘追踪器,支持添加血缘边、查询下游影响集与上游溯源集,模拟“订单表变更波及哪些报表”“报表中心依赖哪些源表”两类核心场景。
  1. self.downstream_edges.setdefault(upstream, []).append(downstream)登记一条上游到下游的血缘边,首次出现的节点自动建空列表。
  2. self.upstream_edges.setdefault(downstream, []).append(upstream)同时登记反向边,供后续向上溯源使用。
  3. stack = [node]用栈保存待遍历节点,从变更节点出发开始扩散。
  4. for nxt in self.downstream_edges.get(current, [])取出当前节点的全部直接下游。
  5. if nxt not in result防止重复访问,确保 DAG 遍历不会陷入环路。
  6. g.add_edge('user_dim', 'sales_daily')录入“用户维度表 → 销售日报”这条血缘关系,像在族谱上添一笔父子关系。
  7. print('Downstream of [orders]:', ...)影响分析:订单表变更会波及哪些下游表。

常见误区

误区我一直以为数据血缘跟数据字典差不多,就是描述表结构和字段含义的文档,把元数据整理好就算建完血缘了。

正解数据字典是“静态户口卡”,只描述每个居民长什么样;血缘是“族谱”,记录谁生谁、谁养谁、数据如何流动。数据血缘回答的是“从哪来、到哪去、经历什么”,数据字典回答的是“是什么、长啥样”。两者互补,但不能互相替代。

为何常见:新手接触血缘时往往从元数据入手,容易把静态描述和动态流转混为一谈,以为“有文档”就等于“有血缘”。

误区我认为只要把 ETL 脚本解析完,血缘就全都有了,后续不需要再管。

正解血缘覆盖数据从采集、清洗、特征工程到模型消费、归档销毁的全链路。ETL 之外,数据接口、手工加工、特征存储都可能是血缘的“断点”。如果只盯 ETL,血缘图谱就会缺胳膊少腿,影响分析时照样漏掉关键下游。

为何常见:因为大多数血缘解析工具都从 SQL/ETL 切入,给人一种“血缘 = ETL 血缘”的错觉。

误区血缘就是出了问题翻出来查一查的工具,属于“事后诸葛亮”。

正解血缘既能“事后查”,也能“事前防”。影响分析在表结构变更前就能预估波及面、自动通知下游;覆盖率监控能提前发现采集盲区。把血缘前置到开发流程中,才是主动治理,而不是被动救火。

为何常见:质量排查和审计是最常见的血缘应用场景,导致用户忽略了血缘在变更评估、风险预警上的前置价值。

误区数据库里已经有外键了,把外键关系画出来就是数据血缘,不用额外建设。

正解外键是数据库层面的物理约束,用于保证完整性;血缘是数据流转的语义描述,涵盖 JOIN、聚合、过滤、特征拼接等没有外键的加工逻辑。两张毫无外键关系的表,完全可能因为一个 JOIN 产生血缘边;反之,有外键的两张表也未必有需要追踪的流转关系。

为何常见:初学者容易把“表之间有连线”误当成“有血缘”,因为它们看起来都像图谱中的边。

误区把现有任务的血缘解析完,存档就行,以后不用再维护。

正解数据链路每天都在变,新任务上线、老任务下线、字段改名都会让血缘图谱老化。血缘建设是一个持续采集、定期校验、动态更新的闭环,否则覆盖率会随时间迅速下降,最终又回到“无谱可用”的状态。

为何常见:一次性项目的惯性思维——做完交付就结束,没意识到血缘是伴随数据体系持续运营的资产。

面试题

Q1. 数据血缘最核心的作用是什么?

单选题 · easy

  • A.提升 SQL 查询性能
  • B.记录数据流转全链路← 正确答案
  • C.替代例行数据备份
  • D.自动修复格式错误

答案:B。数据血缘的核心是记录数据从产生到消费的完整流转链路,就像族谱记录家族关系。SQL 性能优化、数据备份、格式修复都不是血缘的职责。

Q2. 血缘图中的“节点”通常表示什么?

单选题 · easy

  • A.一台物理服务器
  • B.一个数据集或字段← 正确答案
  • C.一名数据工程师
  • D.一段网络连接线

答案:B。血缘图中的节点是数据实体,如数据库表、视图、文件、字段甚至 AI 特征。服务器是物理资源、工程师是操作者、网络连接是通信设施,它们都不是血缘图谱中的“居民”。

Q3. 上游表字段类型变更,要评估对下游的影响,最应该查看什么?

单选题 · mid

  • A.查看血缘下游影响范围← 正确答案
  • B.查看数据库运行日志
  • C.统计下游表的数据行数
  • D.检查上游表的索引数量

答案:A。字段变更影响分析应看血缘图的下游影响范围,从变更节点出发沿血缘边找出所有下游。日志、行数、索引都与“哪些下游被波及”没有直接关系,就像老张翻修祖宅要先看族谱里的子孙名单,而不是去看施工图纸。

Q4. 血缘图 G=(V,E) 中,边 (u,v) 表示什么?

单选题 · mid

  • A.表示 u 与 v 同库存储
  • B.表示从 u 到 v 有数据流转← 正确答案
  • C.表示从 v 到 u 有数据流转
  • D.表示两表没有任何关联

答案:B。血缘边是有方向的,边 (u,v) 表示数据从 u 流向 v,即 v 直接依赖 u。“同库存储”是物理位置概念,“v 到 u”方向反了,“没有任何关联”则完全否定了血缘关系的存在。

Q5. 全链路血缘“上溯”到最远处,最终会发现什么?

单选题 · mid

  • A.数据最初产生的源头← 正确答案
  • B.数据仓库的备份策略
  • C.数据消费的最终报表
  • D.服务器采购的历史账单

答案:A。血缘上溯是沿着有向边逆流而上,一路追溯最终回到数据产生的最初源头系统。备份策略、最终报表、服务器账单都不属于数据“身世”的起点。

Q6. 一张报表数据异常,按血缘图逐层向上游排查,这属于什么?

单选题 · mid

  • A.变更影响分析评估
  • B.根因溯源定位问题← 正确答案
  • C.血缘覆盖率统计
  • D.数据脱敏规则配置

答案:B。从异常节点向上游逐层排查属于根因溯源,目的是找到数据问题的源头。影响分析是自顶向下评估变更波及面,覆盖率统计衡量血缘建设完整度,脱敏则是安全范畴。

Q7. 在 AI 特征工程中,数据血缘的主要作用是什么?

单选题 · hard

  • A.定位特征异常的原始表← 正确答案
  • B.提升模型推理响应速度
  • C.自动压缩训练数据集
  • D.替代模型超参数调优

答案:A。特征血缘记录了特征与原始表、加工逻辑的依赖关系,当特征值异常时,可以沿血缘图定位到哪张原始表或哪个环节出了问题。推理速度、数据压缩、调参都与血缘无关。

Q8. 数据血缘在以下哪些环节发挥作用?

多选题 · easy

  • A.数据质量排查与定位← 正确答案
  • B.降低存储成本的开销
  • C.合规审计的证据链条← 正确答案
  • D.变更影响分析的范围← 正确答案

答案:ACD。A、C、D 分别对应血缘的三大典型应用:质量根因溯源、合规审计证据链、变更影响分析。降低存储成本不是血缘的职责,就像族谱不能当柴火烧。

Q9. 关于血缘覆盖率,下列说法正确的有哪些?

多选题 · mid

  • A.已采集血缘比实际血缘数← 正确答案
  • B.衡量血缘建设的完整程度← 正确答案
  • C.覆盖率越低表示建设越完善
  • D.可帮助发现血缘采集中盲区← 正确答案

答案:ABD。覆盖率 = 已采集血缘 / 实际血缘,是衡量血缘建设完整度的关键指标,覆盖率低说明存在采集盲区,需要补全。C 把“越低越好”的方向完全说反了。

Q10. 血缘覆盖率公式中 L_actual 无法直接统计时,业界常用做法是什么?

单选题 · extreme

  • A.放弃该链路的血缘记录
  • B.依据日志推断补全链路← 正确答案
  • C.直接删除对应的数据表
  • D.将覆盖率默认为百分之百

答案:B。当真实血缘总量无法直接统计时,常用做法是通过全链路日志解析、调度依赖推断等方式补全链路,让覆盖率估计更接近真实。放弃记录、删除数据或默认 100% 都会让覆盖率失去治理意义。