想象你家里藏着一本传了上百年的族谱。翻开它,你能看清每一代人的出身与去向:谁继承了祖辈的生意,谁的后代迁去了南方,哪位祖先的酿酒手艺传到了今天。如果有人问你“咱们家会做豆腐的是哪一支?”你翻几页就能对答如流。 数据世界同样需要这样一本“族谱”,它的名字叫数据血缘(Data Lineage)。只是一条条数据记录的不是人物,而是出身:一条订单从业务库诞生,经过清洗、转换、汇总,最终变成 BI 报表上的数字——谁加工过它、谁调用过它、谁修改过它,都被清清楚楚写进“数据档案”。 有了这本“族谱”,当报表数字异常时,你能逆流而上直捣根因;想修改某张表结构时,能提前看清下游有多少应用会被波及——就像拆墙之前,先查清楚墙上挂着多少祖传的字画。

岗位关联

对 AI 从业者而言,数据血缘是数据治理、影响分析与合规审计的基石,掌握它就能扛起企业数据可信度的核心职责。

目录
  1. 可视化演示
  2. 血缘基础认知
  3. 血缘采集方式
  4. 元数据管理
  5. 字段级血缘
  6. 血缘可视化
  7. 血缘治理流程
  8. 血缘应用实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

通过血缘图谱与字段级追踪双模式,展示数据从源头到应用的完整流转链路及字段级血缘追踪。

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

数据血缘图谱 青色节点为数据源(S1-S3),血缘链路起点 橙色节点为ETL转换(E1-E2),数据加工环节 绿色节点为应用层(A1-A2),血缘链路终点 Lineage = Source -> ETL -> Warehouse -> App

血缘基础认知

族谱的第一价值,是让你明白“我是谁、我从哪里来”。没有族谱的家庭,孩子问起“爷爷的爸爸是做什么的”,长辈只能含混地说“大概是个手艺人”。数据平台也一样,没有血缘记录,一个报表数字异常,你只能靠猜:是源头数据错了,还是清洗脚本被改过?是昨天发布的SQL引起的吗?

数据血缘,就是把这种“猜”变成“查”。它记录数据在产生、加工、流转、消费全过程中的来源与去向。每一个加工任务、每一张表,都像家族中的一位成员;血缘关系则写明“谁生出了谁、谁养育了谁”。按方向划分,有上游血缘(数据从哪来)和下游血缘(数据到哪去);按粒度划分,有表级血缘与字段级血缘。表级血缘告诉我们“这家人姓王”,字段级血缘则精确到“这个孩子的双眼皮来自曾祖母”。

血缘的价值体现在四个场景:问题溯源(指标跌了能查到根因)、影响分析(改表结构前评估波及面)、数据审计(自证数据口径合规)、监管响应(敏感字段去向可追踪)。血缘覆盖度的计算公式如下:

拥有这本“数据族谱”,平台负责人就有了底气:任何一次“家族聚会”(版本升级、表结构变更)前,都能提前通知所有“亲属”做好准备;任何一次“财务纠纷”(指标对不上),都能顺着族谱锁定责任人。族谱越全,底气越足。

血缘覆盖度=已采集血缘的数据链路数应当治理的数据链路总数×100%\displaystyle \text{血缘覆盖度} = \frac{\text{已采集血缘的数据链路数}}{\text{应当治理的数据链路总数}} \times 100\%
血缘覆盖度衡量的是“族谱记全了没有”,只有已登记入册的链路占全部应登记链路的比例足够高,族谱才值得信赖。
  1. 分子-已采集链路已经成功记录上下游关系的数据链路条数,比如从 ODS 表到 DWD 表之间的血缘。
    已采集血缘的数据链路数\displaystyle \text{已采集血缘的数据链路数}
  2. 分母-应治理链路整个平台中所有需要纳入治理范围的数据流转路径总数,包含尚未采集到的部分。
    应当治理的数据链路总数\displaystyle \text{应当治理的数据链路总数}
  3. 比例转换将分子除以分母的结果乘以 100%,转换成直观的百分比,便于与治理目标对表。
    ×100%\displaystyle \times 100\%

血缘采集方式

旧时代的族谱是怎么修出来的?靠族里老人口述、翻旧户口本、查迁徙官牒。来源五花八门,但最终都汇到同一本谱上。数据血缘的采集也是如此——血缘不会自己长出来,需要从不同的“史料”中抽取,综合四种主流方式。

SQL 解析是最常用的方式。ETL 任务本质是一段段 SQL,解析器分析 INSERT、SELECT、FROM、JOIN 等关键字,就能推断出源表和目标表的关系。它的优点是成本低、覆盖面广,几乎可以覆盖所有标准 SQL 任务。日志解析则利用调度平台的任务日志——每次任务执行都会记录输入表、输出表和影响行数,从日志中也能还原血缘关系。

运行时探针是精度最高的方式:在计算引擎中埋入探针,直接抓取真实的数据读写路径,如同给每个人做 DNA 鉴定。缺点是性能开销大,通常只对核心链路使用。手工录入充当兜底方案,对于动态 SQL、外部导入等自动解析覆盖不了的场景,由数据 Owner 人工补充血缘。四种方式各有利弊,实际落地往往组合使用。采集成功率评估公式如下:

正如修族谱既要用老人口述,也要翻官府档案,必要时还得做 DNA 鉴定——真正靠谱的族谱,总是多种方法组合写成的。血缘也一样,先用 SQL 解析铺底,再以日志解析补漏,核心链路加探针,最后用手工录入收尾。

采集成功率=解析成功的任务数任务总数×100%\displaystyle \text{采集成功率} = \frac{\text{解析成功的任务数}}{\text{任务总数}} \times 100\%
采集成功率反映“史料收集”的完整度,如果一堆 SQL 解析失败,族谱的开篇就会缺页。
  1. 分子-解析成功任务在本次采集周期内,能够被解析器或探针成功识别出血缘关系的数据任务数量。
    解析成功的任务数\displaystyle \text{解析成功的任务数}
  2. 分母-任务总数平台上所有执行过的数据加工任务总数,无论是否解析成功都计入。
    任务总数\displaystyle \text{任务总数}
  3. 百分比转换成功数除以总数后乘以 100%,得到采集成功率,用于评估当前采集策略的有效性。
    ×100%\displaystyle \times 100\%

元数据管理

族谱编好以后,不能散落在各家抽屉里,得有一座“祠堂”或档案馆,把每个人的生辰、排行、配偶、子女登记成册。血缘系统中的这座档案馆,就是元数据管理。

血缘要“读懂”每一张表,依赖的是元数据:这张表属于哪个库,有哪些字段,调度任务几点跑,负责人是谁。元数据就是“关于数据的数据”。没有它,血缘就像没有照片的族谱——光有名字,却对不上人。

元数据管理包含四层内容。元数据模型定义了表、字段、任务、调度等对象的统一结构,相当于给档案定了标准格式。元数据存储把结构性元数据放进关系数据库,把血缘关系放进图数据库(如 Neo4j),因为图结构天然适合存储“关系”。元数据质量关注完整性(每个字段是否有描述)、准确性(归属是否正确)、及时性(新表是否及时注册)。元数据服务则提供统一的查询 API,成为血缘可视化和影响分析的数据底座。元数据完整率的度量公式如下:

一个尽职的“档案管理员”,能把族谱里每个人的来龙去脉打理得清清楚楚。血缘系统想要跑得稳,必须先有一份扎实的元数据台账——台子搭正了,上面画的图才不会歪。

元数据完整率=信息完备的元数据对象数元数据对象总数×100%\displaystyle \text{元数据完整率} = \frac{\text{信息完备的元数据对象数}}{\text{元数据对象总数}} \times 100\%
元数据完整率衡量“档案信息填得全不全”,字段描述缺失、归属不明的表,血缘再准也解释不清。
  1. 分子-信息完备对象表、字段、任务等元数据对象中,关键属性(归属、类型、描述、负责人)全部填写完整的数量。
    信息完备的元数据对象数\displaystyle \text{信息完备的元数据对象数}
  2. 分母-对象总数元数据系统中注册的全部对象数量,包括信息残缺的对象。
    元数据对象总数\displaystyle \text{元数据对象总数}
  3. 百分比转换乘以 100% 得到完整率指标,一般以 95% 以上作为合格线。
    ×100%\displaystyle \times 100\%

字段级血缘

表级血缘告诉你“这支人姓王”,字段级血缘却能告诉你“这孩子鼻子像奶奶、个子像外公”。它看得更细,精确到每一列数据是从哪一列来的。金融风控里常问“收入字段到底从哪几个源头列算出”,答案就藏在 SQL 的 SELECT 表达式中。

字段级血缘的关键能力有三项。字段映射记录源表字段与目标表字段之间的对应关系,例如 t_a.a_amt 经过单位换算成为 t_b.b_amt。表达式识别需要解析 SELECT 子句中的字段引用与函数嵌套:对于 sum(a)、concat(x, y) 这类加工,要区分“直接继承”(原样拷贝)与“派生生成”(经计算生成)。血缘去噪则负责剪掉没有业务意义的连边——临时表、中间复制表产生的冗余血缘会让图谱一团乱麻,只保留业务链路中真正有价值的血缘。在数据迁移或测试时,列级比对利用字段血缘校验两套数据的字段对应关系是否一致。字段映射准确率的评估方式如下:

有了字段级这面“放大镜”,数据族谱就不仅是一份备查的家谱,而是一份能精确到每个特征的“遗传学报告”。特征传自哪一位祖先、经过了几代叠加,全都记录在案。

字段映射准确率=正确识别的字段映射数字段映射总数×100%\displaystyle \text{字段映射准确率} = \frac{\text{正确识别的字段映射数}}{\text{字段映射总数}} \times 100\%
字段映射准确率反映“继承关系认得好不好”,识别错一条映射,下游分析就会指错方向。
  1. 分子-正确映射数被血缘解析器正确识别、且经过校验的字段级映射关系数量。
    正确识别的字段映射数\displaystyle \text{正确识别的字段映射数}
  2. 分母-映射总数解析器识别出的全部字段映射数量,包括错误识别和存疑的部分。
    字段映射总数\displaystyle \text{字段映射总数}
  3. 百分比转换乘以 100% 得到准确率,用于衡量字段级血缘的整体可信度。
    ×100%\displaystyle \times 100\%

血缘可视化

族谱修好之后,最痛快的时刻是把它摊开在桌上,一根根线条从祖先延伸到子孙,哪一支是长房、哪一房与邻村有联姻,一目了然。血缘可视化就是把数据的“家族图谱”真正画出来——上百张表、上千条链路如果堆在表格里,再专业的分析师也会头皮发麻。

血缘可视化首先要解决图谱布局问题。常见做法是按数仓分层(ODS→DWD→ADS)做分层布局,让数据从上到下自然流动;也可以按业务域分簇,让销售域、财务域、用户域各自成团。影响分析是可视化交互中最核心的功能:从某个变更节点出发,沿下游方向遍历所有可达节点,高亮所有被波及的表、任务与报表。全链路追踪则反向操作,从最终报表一路追到原始日志,完整还原一条数据的一生。此外还支持多视角视图切换——上游视角、下游视角、任务视角、数据域视角,满足不同角色的查阅需要。

血缘可视化中的影响分析本质上是一个图遍历问题,受影响范围可以表示为:

一张好的血缘图,就像挂在祠堂里的家族树。你不仅能看到“自己这支”的来龙,也能看见整棵大树伸向四方的去脉。结构清晰的图谱,让每一个变更决策都心中有数。

受影响范围=∣{v∈V∣u⇒v}∣\displaystyle \text{受影响范围} = |\{ v \in V \mid u \Rightarrow v \}|
这个公式的意思是:从变更节点 u 出发,沿血缘边能到达的所有下游节点 v,构成一个集合,集合的元素个数就是影响范围。
  1. 变更节点 u被修改或下线的表、字段或任务,是影响传播的起点。
    u∈V\displaystyle u \in V
  2. 可达下游集合从 u 出发,沿着血缘有向边一路能走到的所有节点 v 构成的集合,u ⇒ v 表示存在一条血缘分方向的通路。
    {v∈V∣u⇒v}\displaystyle \{ v \in V \mid u \Rightarrow v \}
  3. 集合大小外层竖线表示取集合中元素的个数,也就是总共受影响的节点数量。
    ∣{v∈V∣u⇒v}∣\displaystyle |\{ v \in V \mid u \Rightarrow v \}|

血缘治理流程

族谱不是修一次就完成了。新人口出生、老人离世、子女分家,都需要有人定期更新、核对。血缘治理,就是给数据族谱建立一套“修订制度”——血缘系统上线后,最大的挑战不是建出来,而是“活下来”。

数据集市不断新增,任务逻辑频繁重构,SQL 脚本天天有人改,血缘如果不跟着变,很快便会失真,最终沦为一张没人信的旧地图。因此血缘治理需要一套标准流程规范:采集 → 校验 → 发布 → 变更更新,形成一个持续运转的闭环。每个环节都应有明确的职责分工:治理工程师负责平台运维与采集任务;数据 Owner(业务方)负责确认自己链路血缘的准确性;平台管理员负责权限控制与版本发布。

治理水平要靠质量监控来兜底。通常用三个指标度量:覆盖度(族谱记全没有)、准确率(族谱记对没有)、时效性(族谱更新及时没有)。任何一个指标跌破阈值,系统自动告警。最后是持续运营:定期盘点缺失链路,结合数据平台的版本发布节奏同步刷新血缘,让血缘管理融入日常研发流程,而不是事后补账。治理闭环率的计算公式如下:

一套可靠的治理制度,能让族谱越用越厚、越用越准,最终成为整个家族都信赖的“正史”。血缘不是建完就结束的项目,而是一场需要持续投入的“修谱工程”。

治理闭环率=已处置完成的数据问题数发现的数据问题总数×100%\displaystyle \text{治理闭环率} = \frac{\text{已处置完成的数据问题数}}{\text{发现的数据问题总数}} \times 100\%
治理闭环率衡量“族谱修订制度”的执行力度,发现的问题只有真正处置完毕,族谱才不会新旧混杂。
  1. 分子-已处置问题在血缘质量监控中发现的覆盖度缺失、准确率偏差等问题中,已完成修复并验证的数量。
    已处置完成的数据问题数\displaystyle \text{已处置完成的数据问题数}
  2. 分母-发现问题同期发现的所有数据问题总数,包含已处置和待处置的。
    发现的数据问题总数\displaystyle \text{发现的数据问题总数}
  3. 百分比转换乘以 100% 得到闭环率,数值越高代表治理流程越健康。
    ×100%\displaystyle \times 100\%

血缘应用实践

族谱真正值钱的时候,是家族遇到大事:分家产要查谱、续香火要查谱、修祠堂要查谱。数据血缘也一样,建设它的终极目的,是帮企业解决真实问题,而不是摆在平台上当装饰画。

影响分析是落地最广的场景。数据平台架构师要改某张 DWD 表的结构,血缘系统自动生成下游依赖清单,推送变更预警给所有相关应用的负责人,把原来“改完才发现炸了一大片”的被动局面,变为“改之前就心中有数”。数据审计场景中,审计人员问“这个指标的口径到底是怎么定义的?”,分析师点击报表节点,血缘瞬间展开从原始日志到最终指标的完整链路,实现“自证清白”。

问题溯源是最提效的场景。每日报表数字异常时,运维人员从报表节点逆流而上,看到“昨天凌晨某清洗任务的 SQL 被替换”,十分钟定位根因,而过去全靠经验排查,平均要花四小时。合规监管则利用血缘对身份证号、手机号等敏感字段打标,追踪它们流经的每一张表、每一个 API 和每一份报表,让监管检查从“翻箱倒柜”变成“一键出报告”。血缘带来的效率提升,可以用溯源效率来量化:

当数据族谱真正融入企业日常运营,它就不再是一本尘封的老书,而是一部随时可查的“家族法典”。小到一次字段变更,大到一场监管审计,翻开族谱,答案就在那里。

溯源效率=无血缘时的平均定位耗时有血缘时的平均定位耗时\displaystyle \text{溯源效率} = \frac{\text{无血缘时的平均定位耗时}}{\text{有血缘时的平均定位耗时}}
溯源效率衡量“查谱”比“瞎猜”快多少倍。分子是没有血缘时凭经验排查的平均耗时,分母是有血缘图谱辅助后的平均耗时。
  1. 分子-无血缘耗时没有血缘系统时,靠工程师经验排查数据问题平均花费的时间。
    无血缘时的平均定位耗时\displaystyle \text{无血缘时的平均定位耗时}
  2. 分母-有血缘耗时接入血缘图谱后,从报表反查源头定位根因的平均时间。
    有血缘时的平均定位耗时\displaystyle \text{有血缘时的平均定位耗时}
  3. 比值含义分子分母相除得到倍数,例如 4 小时除以 10 分钟等于 24 倍,即效率提升 24 倍。
    无血缘耗时有血缘耗时\displaystyle \frac{\text{无血缘耗时}}{\text{有血缘耗时}}

AI 应用场景

金融数仓的指标异常溯源

阶段:数据诊断与运维(DataOps)

解决的问题:日结报表的“手续费收入”突然对不上账。传统方式靠资深工程师逐层手工排查上游任务,平均耗时 4 小时以上。借助血缘系统,报表节点自动回溯字段级链路,发现某规则引擎的源表结构在凌晨被修改,10 分钟锁定根因并触发告警。

具体案例:某支付公司在每日批跑后自动执行字段血缘校验,对比“手续费收入”字段的映射来源,发现来源表从“规则引擎临时表”漂移为“备份表”,立即通知相关业务方回滚,将一次潜在的生产事故化解在报表发布前。

敏感数据全链路合规追踪

阶段:数据安全审计与合规监管

解决的问题:监管要求“所有涉及身份证、手机号的数据处理必须有完整访问轨迹”。传统做法是人工翻系统的操作日志,耗时两周且极易遗漏。血缘系统对敏感字段自动打标,并沿血缘图谱标记其在每张表、每个任务、每个 API 中的流转路径。

具体案例:某银行需要向监管部门证明“客户手机号字段未流入未经授权的应用”。合规分析师在血缘平台搜索该字段,一张从核心系统到数仓、再到风控模型特征库的完整链路图即刻生成,审计材料当天交付,而过去需要两周。

表结构变更影响预警

阶段:变更管理与发布管理

解决的问题:开发工程师打算修改订单表的字段类型,传统变更评审靠邮件反复询问下游负责人,经常遗漏影响方。血缘系统将变更节点加入模拟分析,自动计算全部受影响的下游表、任务和应用,并推送变更告知。

具体案例:某互联网公司的数据平台提供“变更影响分析”按钮,架构师点击某张 DWD 明细表,血缘图立即高亮出 37 个下游依赖,一键导出清单并批量发送变更通知,评审周期从线下 1 周缩短到 1 天。

Python 演示

python73 行
# -*- coding: utf-8 -*-"""简易数据血缘采集与影响分析演示"""import re  class LineageGraph:    """血缘关系图, 维护表级上下游关系"""     def __init__(self):        self.ups = {}    # node -> set(上游节点)        self.downs = {}  # node -> set(下游节点)     def add_edge(self, src, dst):        """登记一条血缘: src(上游表) -> dst(下游表)"""        self.downs.setdefault(src, set()).add(dst)        self.ups.setdefault(dst, set()).add(src)     def parse_sql(self, sql):        """从单条SQL文本中提取源表与目标表, 返回是否解析成功"""        sql = re.sub(r"--[^\n]*", "", sql)          # 去掉行注释        sql = re.sub(r"/\*.*?\*/", "", sql, flags=re.S)  # 去掉块注释        m_insert = re.search(r"INSERT\s+INTO\s+([`\w]+)", sql, re.I)        m_ctas = re.search(r"CREATE\s+TABLE\s+([`\w]+).*?\bAS\b", sql, re.I | re.S)        dst = None        if m_insert:            dst = m_insert.group(1)        elif m_ctas:            dst = m_ctas.group(1)        src_tables = re.findall(r"(?:FROM|JOIN)\s+([`\w\.]+)", sql, re.I)        if dst and src_tables:            for src in src_tables:                self.add_edge(src, dst)            return True        return False     def impact(self, node):        """返回node变更后所有受影响的下游节点(影响分析)"""        result = set()        stack = [node]        while stack:            cur = stack.pop()            for nxt in self.downs.get(cur, set()):                if nxt not in result:                    result.add(nxt)                    stack.append(nxt)        return result     def lineage(self, node):        """返回node的所有上游来源(问题溯源)"""        result = set()        stack = [node]        while stack:            cur = stack.pop()            for prev in self.ups.get(cur, set()):                if prev not in result:                    result.add(prev)                    stack.append(prev)        return result  if __name__ == "__main__":    g = LineageGraph()    sqls = [        "INSERT INTO dwd_order SELECT o.id, u.name FROM ods_order o "        "JOIN ods_user u ON o.uid = u.id",        "CREATE TABLE ads_sale AS SELECT order_id, amount FROM dwd_order "        "WHERE amount > 0",        "INSERT INTO dm_rep_sale SELECT order_id, amount FROM ads_sale",    ]    for s in sqls:        print("解析成功" if g.parse_sql(s) else "解析失败")    print("上游 ods_order 的下游影响:", sorted(g.impact("ods_order")))    print("报表 dm_rep_sale 的上游来源:", sorted(g.lineage("dm_rep_sale")))
目的:用一段轻量 Python 演示血缘的两大核心能力——从 SQL 中解析出表间血缘关系,再基于血缘图执行“下游影响分析”与“上游问题溯源”。
  1. self.downs.setdefault(src, set()).add(dst)登记“源表 → 目标表”的父传子关系,set 保证同一条边不会被重复记录。
  2. re.sub(r"--[^\n]*", "", sql)先把 SQL 里的行注释清除,避免注释中的关键字干扰血缘解析。
  3. m_insert = re.search(r"INSERT\s+INTO\s+([`\w]+)", sql, re.I)用正则从 INSERT INTO 语句中提取目标表名,这是解析的第一步。
  4. src_tables = re.findall(r"(?:FROM|JOIN)\s+([`\w\.]+)“, sql, re.I)同时抓取 FROM 和 JOIN 后面的所有表名,它们是这条血缘的”祖先"。

常见误区

误区我以为把表结构、字段注释整理成一份文档就算完成数据血缘了。我们团队做了厚厚一本《数据字典》,领导说这就是血缘,可真出了数据问题,根本查不了流向。

正解数据字典是“静止的户口本”,只记录每个人“是谁、长什么样”;血缘是“动态的家族树”,要记录“谁生了谁、流到哪去”。前者回答“这张表有哪些字段”,后者回答“这个字段从哪来、被谁用过”。缺少上下游关系链路的字典,永远替代不了血缘。

为何常见:两者都围绕元数据展开,初学者容易混淆“对象的描述信息”与“对象之间的关系信息”,误以为把表字段列清楚就万事大吉。

误区血缘系统上线时跑了一遍全量扫描,之后就再也没更新过。半年后发现血缘图跟真实的数据加工流程完全对不上,团队就不再信任这套系统了。

正解数据链路是“活”的。新任务每天上线、SQL 逻辑频繁调整、旧表不断下线,任何变化都会让血缘失真。血缘必须与调度平台、元数据系统联动,做到“每次任务变更后自动增量更新”,并定期做全量校验和盘点。

为何常见:把血缘当成静态文档,忽略了数据平台持续演进的现实,以为“修一次谱就能传三代”。

误区既然 SQL 解析成本低、覆盖广,那就把所有血缘都交给解析器。结果存过过程里动态拼接的 SQL 完全解析不了,手工导数的链路也断了,血缘图缺了一大块。

正解SQL 解析只擅长处理规范化的静态 SQL。对于存储过程、动态 SQL、外部数据交换等场景,必须结合运行时探针、日志解析和人工补录来补齐,形成“组合采集”策略。判断标准是:解析不了没关系,只要最终血缘覆盖度不达标,就要考虑换一种采集方式补位。

为何常见:低估了生产环境的复杂度,把最常用的方法误当成万能方法,缺了“方法选型”的全局视角。

误区血缘图密密麻麻全是连线,看起来特别“专业”,但真正使用时几乎没人看得懂,也不解决实际问题,最后成了墙上的一幅装饰画。

正解全量采集的血缘往往夹杂大量噪声——临时表、中间复制表、测试任务都会产生冗余连边。有价值的血缘需要“去噪剪枝”,保留业务语义清晰的核心链路,并按重要程度、数仓分层、业务域做视图组织,让使用者一眼聚焦到关键路径。

为何常见:把“信息全”与“信息可用”混为一谈,忽略了信息过载会大幅降低血缘图的可读性与决策效率。

面试题

Q1. 数据血缘的核心使命是?

单选题 · easy

  • A.提升查询速度
  • B.记录流转链路← 正确答案
  • C.压缩冗余存储
  • D.增强网络安全

答案:B。数据血缘的核心使命是为数据建立“家族谱系”,记录数据从源头到应用的完整流转链路。A 是性能优化范畴,C 是存储优化目标,D 是网络安全职责,三者都不是血缘的本质功能。选 B 最贴合定义。

Q2. 血缘中的“下游”指的是?

单选题 · easy

  • A.数据产生的源头
  • B.数据流向的消费端← 正确答案
  • C.数据清洗的规则
  • D.数据备份的介质

答案:B。在血缘的方向定义中,下游指数据被加工、消费的方向,例如数据集市、报表系统、下游应用。A 是上游,C 是加工逻辑,D 是存储介质。记住“上游供粮、下游吃饭”即可答对。

Q3. 对于 SQL"SELECT a+b AS c FROM t",字段 c 的血缘应如何标记?

单选题 · extreme

  • A.不产生任何血缘关系
  • B.完全继承字段 t.a
  • C.由 t.a 和 t.b 推导生成← 正确答案
  • D.直接继承自字段 t.c

答案:C。c 是 a 与 b 经过加法运算得到的“派生字段”,血缘上必须标记为“由 t.a 和 t.b 共同推导”。A 错在否认血缘存在,B 错在只认单一来源,D 错在源表根本没有 t.c 字段。派生字段要记录“加工因子”而非简单继承。

Q4. 字段级血缘比表级血缘?

单选题 · mid

  • A.粒度更粗覆盖更大
  • B.粒度更细定位更准← 正确答案
  • C.采集难度完全相同
  • D.数据存储空间更小

答案:B。字段级血缘将追踪粒度从“表”下沉到“列”,能精确定位某个指标字段的来源列,所以粒度更细、定位更准。A 说反了,C 中字段级解析难度远高于表级,D 与存储空间无关。

Q5. 血缘可视化中影响分析的目标是?

单选题 · mid

  • A.预测硬件故障点
  • B.评估变更波及面← 正确答案
  • C.统计任务耗时量
  • D.监控数据质量分

答案:B。影响分析是从某个变更节点出发,沿血缘下游遍历全部可达节点,评估改一张表会波及多少下游任务和应用。A 是硬件监控,C 是性能分析,D 是数据质量管理,均非血缘图的核心交互功能。

Q6. 元数据也被称为什么?

单选题 · mid

  • A.关于数据的数据← 正确答案
  • B.海量数据的存储
  • C.数据清洗的工具
  • D.数据建模的方法

答案:A。元数据是描述数据的数据,例如表名、字段类型、任务归属等,是血缘系统读懂数据对象的“档案库”。B、C、D 分别属于存储、工具、方法论范畴,与元数据定义不符。

Q7. SQL 解析采集血缘时,哪种情况最难处理?

单选题 · hard

  • A.标准单表查询
  • B.动态拼接 SQL← 正确答案
  • C.简单视图嵌套
  • D.批量数据导入

答案:B。动态拼接 SQL 在运行时才确定表名和字段名,静态解析器无法提前获取真实的目标表。A 和 C 都有明确的语法结构,D 也可以通过任务信息推断。唯有 B 需要结合运行时探针才能可靠采集。

Q8. 血缘治理流程的核心环节包括?

多选题 · mid

  • A.血缘采集与校验← 正确答案
  • B.血缘版本发布← 正确答案
  • C.血缘持续更新← 正确答案
  • D.数据库手工备份

答案:ABC。血缘治理是一个“采集→校验→发布→更新”的闭环。D 是数据库基础设施的日常运维动作,与血缘治理流程无关。治理的本质是让血缘持续准确、可信,而非数据备份。

Q9. 血缘体系能支撑哪些典型监管需求?

多选题 · hard

  • A.数据问题定位← 正确答案
  • B.敏感数据追踪← 正确答案
  • C.影响范围评估← 正确答案
  • D.磁盘容量规划

答案:ABC。血缘的核心应用场景就是问题溯源(A)、合规审计中的敏感字段追踪(B)和变更影响分析(C)。D 属于容量管理,血缘并不提供任何存储规划能力。

Q10. 血缘可视化的常见视图包括?

多选题 · mid

  • A.上游血缘视图← 正确答案
  • B.下游血缘视图← 正确答案
  • C.全链路血缘视图← 正确答案
  • D.数据索引视图

答案:ABC。上游视图展示“我从哪来”,下游视图展示“我到哪去”,全链路视图还原完整生命周期,三者是血缘可视化的标准形态。D 是数据库索引管理的概念,与血缘视图无关。