想象你接手了一个有上万个成员的大家族,成员之间存在着复杂的亲缘关系:谁是谁的祖先、谁的数据供养了谁的成长。这个“家族”就是企业里的数据系统——每一张表、每一个字段、每一段处理逻辑都是一个成员,而它们之间的依赖关系就是“血脉”。过去,给这个数据家族修家谱只能靠手工翻阅档案、逐一比对记录,费时费力还容易出错。如今,“血缘自动化发现”技术就像一位聪明的族谱编纂官,能自动翻阅海量的 SQL 脚本、运行日志和元数据档案,快速又准确地梳理出完整的血缘关系图谱,让数据工程师一眼看清谁是谁的“祖先”、谁又是谁的“后代”。

岗位关联

掌握血缘自动化发现,你就能在数据治理中快速定位故障源头、评估变更影响、通过合规审计,成为企业数据资产最可靠的守护者。

目录
  1. 可视化演示
  2. 血缘基本概念——认识数据家族的成员与血脉
  3. 自动化发现原理——族谱编纂官的流水线
  4. 关键技术手段——编纂官的三大法宝
  5. 血缘图构建——画出辈分分明的家族图谱
  6. 血缘存储查询——把家谱请进家族档案库
  7. 血缘应用实践——家谱真正的用武之地
  8. 血缘AI赋能——给编纂官配一个AI助手
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示数据血缘自动化发现三大技术路径:静态SQL解析(AST提取表级血缘)、动态运行时采集(审计日志+执行计划+调度DAG)、多源融合合并(列级血缘+质量评估指标)。

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

'+captions.static+'

血缘基本概念——认识数据家族的成员与血脉

一个大家族要修族谱,第一件事是明确谁是家族成员、成员之间什么关系。数据世界也一样:某张订单表、某个用户 ID 字段、某段清洗逻辑,都是数据家族的成员;“订单表从日志表加工而来”“用户 ID 字段来自埋点表”,就是成员之间的血脉联系。数据血缘(Data Lineage)正是这样一张记录数据从诞生、流转到消费全过程的依赖关系“生命地图”。

要画出这张地图,必须依赖关键原料——元数据。元数据是“描述数据的数据”,比如表名、字段名、字段类型、创建时间、负责人,相当于家族成员的户籍档案。有了这些档案,我们才能回答“这张表叫什么、里面的字段有哪些、什么时候建的”。

血缘按粒度可分为表级血缘和字段级血缘。表级血缘描述表与表之间的整表依赖,像家谱中的“支脉”;字段级血缘精确到列与列的映射,像记录到每个人。血缘的价值主要体现在三方面:向上可以追溯问题源头(寻根问祖),向下可以评估变更影响(预测波及),对外可以支撑合规审计(证明出身清白)。

修族谱看起来简单,但家族成员上万、关系交错,就需要规范化的“记录范式”。G=(V,E) 正是血缘世界的记录范式——它让数据家族的血脉第一次变得可以被计算机自动刻画和运算。

G=(V,E)G = (V, E)
血缘图本质上就是一张关系网:节点是家族成员,边是成员间的亲缘连线。
  1. V节点集合:V={v1,v2,…,vn}V = \{v_1, v_2, \ldots, v_n\} 表示血缘图中的数据实体(表或字段),对应家族里的每一位成员。
  2. E依赖边集合:E={(vi,vj)∣vj depends on vi}E = \{(v_i, v_j) \mid v_j \ \text{depends on}\ v_i\} 表示每条有向边从源节点指向目标节点,对应“谁是谁的祖先”。
  3. G整个血缘图:GG 由 V 和 E 共同构成,整体描述这张数据家族的完整血脉网。

自动化发现原理——族谱编纂官的流水线

族谱编纂官接手家族时,不可能挨家挨户访问上万人,他需要一套高效流水线:调档案、抄关系、排辈分、归档。血缘自动化发现也是流水线,核心环节包括解析技术、依赖提取、关系构建和调度触发。

解析技术负责读懂“家族故事”——SQL 脚本和存储过程。一条 INSERT INTO ... SELECT ... FROM ... 的 SQL 就是一段“某成员的身世介绍”。解析器先将 SQL 拆成语法树,识别出读写了哪些表、哪些字段,为后续关系提取做好准备。

依赖提取从解析结果中抽取关键信息,最核心的规则是:SQL 中 FROM 后面的表是数据的来源(祖先),INSERT INTO 的目标表是数据的去向(后代)。关系构建把分散的依赖两两连线,拼成完整血缘图。调度触发则负责自动化运转:每天凌晨或 ETL 任务完成后自动执行一遍以上流程,保证血缘图不过期。

有了这条流水线,编纂官不再需要熬夜翻阅档案——只要让解析引擎每天自动“读故事、记关系、连家谱”,数据家族的图谱就会自己生长,始终新鲜。

D(S)={t∣t∈FROM(S)}D(S) = \{t \mid t \in \text{FROM}(S)\}
一条 SQL 语句“提到了谁”,谁就是这条数据的祖先;D(S) 就是这条 SQL 的祖先集合。
  1. S目标 SQL 语句:SS 是一条待解析的 SQL,例如 INSERT INTO dwd_user SELECT ... FROM ods_log。
  2. FROM(S)源表集合:FROM(S)\text{FROM}(S) 返回 SQL 中 FROM / JOIN 子句后出现的数据表,即数据来源。
  3. D(S)依赖表集合:D(S)D(S) 是该 SQL 依赖的源表集合,也就是血缘中的“祖先集合”。

关键技术手段——编纂官的三大法宝

编修大型族谱时,编纂官有三种手段:翻旧档案、现场走访、查大事记。血缘自动化发现也对应三大技术法宝:静态解析、动态追踪和日志分析。

静态解析针对“旧档案”——SQL 脚本、存储过程、视图定义。它不运行代码,只做语法分析,速度快、零侵入。但遇到动态 SQL(代码里拼接表名)或复杂临时表时,静态解析容易漏报,出现“档案不全”的问题,比如表名藏在变量里就根本找不到。

动态追踪弥补静态解析的盲区:它在 SQL 真实执行时拦截分析,像现场走访一样“眼见为实”,能看到最终实际执行的表和字段。日志分析则读取调度系统与任务运行日志,从宏观角度还原数据流的整体脉络。现实中往往采用混合策略,以静态解析为主体、动态追踪补细节、日志分析查全局,用 F1 分数综合评价发现效果。

好的编纂官从不只靠一种手段。三大法宝互相印证,才能让族谱既完整又准确,避免“漏写一支脉、错认一门亲”。

F1=2×P×RP+RF1 = \frac{2 \times P \times R}{P + R}
F1 是“找得准”和“找得全”的平衡木:血缘发现既不能乱认亲戚,也不能漏掉至亲。
  1. P精确率:P=TPTP+FPP = \frac{TP}{TP + FP} 在找出的依赖中,有多少是真实依赖;对应家谱里“认的亲戚里有多少真亲戚”。
  2. R召回率:R=TPTP+FNR = \frac{TP}{TP + FN} 在真实依赖中,有多少被找到了;对应“真正的亲戚里找到了多少”。
  3. F1综合评价指标:F1=2×P×RP+RF1 = \frac{2 \times P \times R}{P + R} 是精确率和召回率的调和平均,值越大说明血缘发现效果越好。

血缘图构建——画出辈分分明的家族图谱

族谱要辈分分明,叔叔绝不能画成爷爷的儿子。血缘关系也需要一张严谨的图谱,这就是有向无环图(DAG):有方向,不能逆流;无环,不能倒流。

在血缘 DAG 中,节点是数据表、字段或计算任务;有向边代表依赖方向,从源指向目标。DAG 要求不存在环:一条数据从 A 流向 B,又从 B 流回 A,在真实世界中通常意味着逻辑错误或循环依赖,必须被识别和处理。

节点设计要兼顾粗细粒度:表级节点给出大局观,字段级节点给出精细度。边关系包括数据依赖边和字段映射边,前者说清“表依赖表”,后者标出“字段对应字段”。图算法支撑了后续查询:BFS 宽度优先遍历用于找下游影响,DFS 深度优先遍历用于深链追踪;若检测到环,需要定位并标记断裂点,保证图谱继续可算。

辈分清晰的图谱才是可靠的家谱。血缘 DAG 让数据家族每一代之间的承继关系一目了然,也为后面的自动化分析和查询打下根基。

∀(vi,vj)∈E,vi≠vj and path(vj,vi)=∅\forall (v_i, v_j) \in E, \quad v_i \neq v_j \ \text{and}\ \text{path}(v_j, v_i) = \varnothing
合法的血缘图不允许“逆伦”:没有自环,也没有从后辈绕回祖先的路径。
  1. 任意依赖边∀(vi,vj)∈E\forall (v_i, v_j) \in E 遍历血缘图中每一条有向依赖边,检查每一段亲缘关系。
  2. 禁止自环vi≠vjv_i \neq v_j 节点不允许依赖自身,对应“一个人不能是自己的祖先”。
  3. 禁止循环路径path(vj,vi)=∅\text{path}(v_j, v_i) = \varnothing 从目标节点出发不能回到源节点,确保图谱无环。

血缘存储查询——把家谱请进家族档案库

族谱修好后不能卷在抽屉里落灰,得存放进一个能快速检索的档案库。血缘图谱的“档案库”首选图数据库,例如 Neo4j。

为什么不用普通关系表?因为血缘查询的核心是“谁是谁的祖先/后代”,这在关系数据库里要靠多次自连接,效率极低,就像在纸质通讯录里查“谁和谁是亲戚”一样痛苦。图数据库以节点和边为原生存储单元,天然匹配血缘结构。

属性图模型将表、字段存成节点,依赖存成边,节点和边都可以附带属性(如字段类型、更新时间等)。查询用图查询语言(如 Cypher)表达,一句 MATCH 就能从任意节点向上下游遍历。性能优化方面,常见手段包括建立索引、缓存高频子图和分区存储,确保在大规模血缘图上查询仍然迅速。

档案库不在于藏得多深,而在于问一声“某某的后代有哪些”,能立刻把整支脉络端到面前。图数据库就让血缘查询有了这种“秒答”体验。

A[i][j]={1,(vi,vj)∈E0,otherwiseA[i][j] = \begin{cases} 1, & (v_i, v_j) \in E \\ 0, & \text{otherwise} \end{cases}
邻接矩阵是血缘图的一种“存储底稿”:表格里填 1 表示“有关系”,填 0 表示“没关系”。
  1. A[i][j]邻接矩阵元素:A[i][j]A[i][j] 表示第 i 个节点到第 j 个节点是否有直接依赖边。
  2. 1 的条件(vi,vj)∈E(v_i, v_j) \in E 当存在从 vi 指向 vj 的有向边时值为 1。
  3. 0 的条件otherwise\text{otherwise} 否则值为 0,表示两个节点之间没有直接亲缘关系。

血缘应用实践——家谱真正的用武之地

族谱摆在案头不是为了好看,而是真能解决家族大事:寻根问祖、预测遗传风险、开出身证明。血缘图的工程价值也体现在四个方面:影响分析、数据追踪、合规审计和数据资产。

影响分析是最常见场景:要修改某张表的某个字段,先看它会影响多少下游表和报表。利用血缘图向下游做 BFS 遍历,几秒就能列出全部波及对象,相当于“改一个祖辈的名字,看看整个家族有多少人要改户口本”。

数据追踪则相反:报表数据异常时向上游回溯,逐层定位哪一层加工出了问题,相当于顺着家谱倒查“这个坏习惯是从哪一代传下来的”。合规审计要求企业说清每份数据的来源和加工路径,血缘图就是最有力的证据链。更进一步,血缘图让数据资产可评估:一张表有多重要?它的下游依赖数量和直达业务报表的路径,就是资产价值标尺。

一张修得好的家谱,能在关键时刻护住整个家族。血缘图就是数据家族的护身符:平时静静待着,出事时瞬间指明方向。

T(v)={u∣∃ a path from v to u}T(v) = \{u \mid \exists \ \text{a path from}\ v \ \text{to}\ u\}
T(v) 是“你的子孙列表”:修改节点 v,T(v) 里每个节点都可能在波及范围内。
  1. T(v)传递闭包:T(v)T(v) 表示从节点 v 出发能到达的所有节点集合,即全部下游后代。
  2. 存在路径∃ a path from v to u\exists \ \text{a path from}\ v \ \text{to}\ u 从 v 出发经过若干条有向边可以到达 u。
  3. 影响范围T(v)T(v) 中的每个节点都是修改 v 后可能受影响的下游节点,影响分析本质上就是快速计算这个集合。

血缘AI赋能——给编纂官配一个AI助手

家族人口太多,编纂官力不从心,请来一位 AI 助手:它能从模糊描述里认出远亲、自动给新人补档案、回答“谁是某某的爷爷”。血缘自动化发现也正被 AI 赋能,走向更聪明的下一代。

AI 辅助血缘的核心,是让机器学习模型处理“看不清的关系”。例如两个字段语义相同但命名不同(customer_id 与 cid),静态解析无法判断它们是同一实体,这正是隐式依赖。通过向量化表示和相似度计算,AI 能自动发现这些潜在血缘。

智能推荐基于相似度给用户推荐可能相关的表或字段,帮分析人员快速建立血缘雏形;自动标注用大模型为血缘边生成自然语言描述,让人一眼看懂“为什么有这条依赖”;智能问答让用户用大白话提问:“订单金额到报表经过了哪些处理?”系统直接给出路径答案。AI 与血缘形成增强闭环:血缘提供结构知识,AI 提供语义理解。

AI 助手不会取代编纂官,但会让编纂官从“逐页翻档案”变成“问一句话就有答案”。数据家族越大,这个助手越不可或缺。

sim(A,B)=cos⁡(θ)=A⋅B∥A∥∥B∥\text{sim}(A, B) = \cos(\theta) = \frac{A \cdot B}{\|A\| \|B\|}
余弦相似度像是“长相相似度”:两个字段的向量长得越像,就越可能是同一位“家族成员”。
  1. A、B 向量A,BA, B 分别是字段或表名的向量化表示,记录语义特征。
  2. 点积与模长A⋅BA \cdot B 计算两个向量的点积,∥A∥∥B∥\|A\| \|B\| 是模长乘积,用来归一化。
  3. sim(A,B)相似度结果:cos⁡(θ)\cos(\theta) 取值越接近 1,两个字段语义越相似,越可能在血缘上是同一实体。

AI 应用场景

千万级字段的血缘地图自动构建

阶段:数据血缘自动化发现

解决的问题:大厂数据仓库有几万张表、几十万字段,手工维护血缘完全不可能;传统方案靠人工登记 ER 图,数据一变更就迅速失真。自动化发现每天解析数万条 SQL,结合日志动态追踪,自动生成并持续更新血缘图。

具体案例:某电商平台数据团队用静态解析调度脚本、动态追踪 Hive/Spark 任务执行、日志分析捕获临时表血缘,三天内构建出覆盖全部核心链路的血缘地图,准确率超过 90%。

上线前变更影响分析

阶段:血缘图构建 + 图算法应用

解决的问题:修改一张核心维度表之前,运维想知道会影响多少下游报表。靠人肉问询既慢又漏,用血缘图做 BFS 遍历,秒级给出影响范围。

具体案例:某金融公司计划给客户表增加一个字段,血缘系统自动列出受影响的下游 37 张表、12 张报表和 3 个 AI 特征,业务方提前一周完成兼容改造,避免了一次上线事故。

合规审计的数据流转报告

阶段:血缘查询与合规审计

解决的问题:个保法/GDPR 要求企业证明个人信息处理有合法依据,审计时要说清“哪个字段从哪来、到哪去”。血缘查询引擎一键生成数据流转报告。

具体案例:某医疗健康企业收到监管问询,数据团队在血缘图谱中定位“手机号”字段全链路,生成从埋点到数仓再到风控模型的完整流转路径,三个工作日完成答复。

Python 演示

python68 行
"""SQL血缘自动化发现:从一组SQL脚本中提取表级依赖关系。"""import re  def clean_sql(sql: str) -> str:    """去除注释和字符串字面量,统一大写。"""    sql = re.sub(r"--[^\n]*", "", sql)    sql = re.sub(r"/\*.*?\*/", "", sql, flags=re.S)    sql = re.sub(r"'(?:[^']|'')*'", "''", sql)    return sql.upper()  def extract_tables(sql: str) -> set:    """提取 SQL 中 FROM/JOIN/INTO/UPDATE 后面的表名(简化版)。"""    tokens = re.findall(r"\b(?:FROM|JOIN|INTO|UPDATE)\s+([A-Z_][A-Z0-9_]*)", clean_sql(sql))    return set(tokens)  def parse_lineage(sql_text: str):    """解析一条 SQL,返回 (目标表, 源表集合)。"""    m = re.search(r"INSERT\s+INTO\s+([A-Z_][A-Z0-9_]*)", clean_sql(sql_text))    target = m.group(1) if m else None    sources = extract_tables(sql_text)    if target in sources:        sources.remove(target)    return target, sources  def build_lineage(sql_list):    """输入 SQL 列表,输出血缘边列表 [(源表, 目标表), ...]。"""    edges = []    for sql in sql_list:        target, sources = parse_lineage(sql)        if target is None:            continue        for s in sorted(sources):            edges.append((s, target))    return edges  def main():    scripts = [        """        INSERT INTO dwd_user_daily        SELECT user_id, COUNT(*)        FROM ods_user_log        WHERE dt = '2025-01-01'        GROUP BY user_id        """,        """        INSERT INTO dws_user_stats        SELECT user_id, SUM(cnt)        FROM dwd_user_daily        GROUP BY user_id        """,        """        INSERT INTO ads_user_report        SELECT a.user_id, b.cnt        FROM dws_user_stats a        JOIN dim_user_info d ON a.user_id = d.user_id        """    ]    for src, dst in build_lineage(scripts):        print(f"{src} -> {dst}")  if __name__ == "__main__":    main()
目的:从一组 SQL 脚本中自动化提取表级血缘边,输出“源表 -> 目标表”依赖关系,是血缘自动化发现的简化实现。
  1. sql = re.sub(r"--[^\n]*", "", sql)去掉行注释,防止注释里出现表名干扰结果。
  2. sql = re.sub(r"'(?:[^']|'')*'", "''", sql)把字符串字面量替换成空串,避免把字符串内容误当表名。
  3. tokens = re.findall(r"\b(?:FROM|JOIN|INTO|UPDATE)\s+([A-Z_][A-Z0-9_]*)", clean_sql(sql))用正则一次性捕获 FROM/JOIN/INTO/UPDATE 后面的表名。
  4. target, sources = parse_lineage(sql_text)将一条 SQL 拆成“目标表”和“源表集合”两部分。
  5. if target in sources: sources.remove(target)排除自依赖,避免让自己成为自己的祖先。
  6. for s in sorted(sources): edges.append((s, target))排序后生成边,保证每次输出顺序稳定。

常见误区

误区很多人觉得把 ETL 任务之间画个箭头就算血缘了,不关心表与表、字段与字段之间的关系。反正看到的都是一堆连线,那不就是血缘图吗?

正解ETL 流程图是任务调度视角,画的是“谁在跑什么任务”;血缘图是数据实体视角,画的是“数据从哪张表流到哪张表”。就像家谱记录的是“谁是谁的祖先”,而不是“哪个管家负责给谁送饭”。两者有关联,但不能混为一谈。

为何常见:ETL 流程图最容易从调度平台里拿到,而字段级血缘需要深入 SQL 内部才看得见,所以容易用前者冒充后者。

误区以为只要把 SQL 脚本都静态分析一遍,血缘就完整了,没必要看运行时。代码在那,解析一下不就有结果了吗?

正解存储过程里的动态 SQL、参数化表名、临时表、UDF 黑盒,静态解析经常抓瞎,存在漏报和误报。动态追踪能看到真实执行的表,日志分析能补全任务级脉络,三者混合才能逼近完整。

为何常见:SQL 脚本是血缘的主要载体,给人一种“脚本都解析了就等于全知道了”的错觉,忽略了运行时动态性。

误区教科书说血缘图应该是有向无环图(DAG),所以一旦检测到环,就认为系统出错了,直接拒绝保存或报错终止。

正解真实数仓里常有临时表互相覆盖、递归计算、数据回刷等循环依赖。工程上应当识别环、记录告警,然后选择合适断裂点断开(比如按调度层级),保证图谱可继续使用,而不是简单粗暴地报错。

为何常见:理论学习时满眼都是 DAG 的干净形态,导致遇到真实世界的“脏环”时处理方式过于理想化。

误区跑一次自动化发现,画好图就完事大吉,之后几个月都不再更新。毕竟图都画出来了,还能变吗?

正解数据模型、ETL 逻辑、字段定义都在持续变化。血缘必须每天或每次任务调度后自动刷新,否则图谱一过期,平时看着挺全,真到排查故障和合规审计时反而误事。

为何常见:把血缘图当成了静态文档,忽略了数据系统本身是活的、时刻在演化的。

误区团队一直用 MySQL,血缘关系也就两张表存一存,查“祖先子孙”就是多层 JOIN,慢就慢点呗。

正解血缘是密集图结构,关系数据库用自连接模拟图遍历,深度一高性能急剧下降。图数据库以节点和边为原生存储单位,BFS 遍历性能可以相差几个数量级,是血缘存储的更优选择。

为何常见:技术选型惯性使然——团队熟悉关系库,不想引入新的存储组件,结果在血缘规模上来后自食其果。

面试题

Q1. 数据血缘关系最适合用什么结构表示?

单选题 · easy

  • A.树形层级结构
  • B.键值对存储
  • C.有向无环图← 正确答案
  • D.单向链表结构

答案:C。血缘关系有方向、有依赖、不允许循环,最贴合的结构是 DAG(有向无环图)。树形结构过于严格(每个节点只能有一个父节点),链式结构只能表达线性关系,键值对无法表达图结构。就像家谱既不是一棵严格的树,也不是一条链,而是一张辈分分明的有向图。

Q2. 血缘自动化发现中,“元数据”指的是什么?

单选题 · easy

  • A.描述数据的数据← 正确答案
  • B.数据的业务含义
  • C.用户的登录日志
  • D.加密后的密文

答案:A。元数据是“描述数据的数据”,比如表名、字段名、字段类型、创建时间等,相当于族谱成员的户籍档案。业务含义是人为解读,登录日志是业务数据本身,加密密文是数据处理产物,它们都不是元数据的准确定义。

Q3. 以下哪些是血缘自动化发现的技术手段?

多选题 · mid

  • A.静态解析SQL脚本← 正确答案
  • B.运行时动态追踪← 正确答案
  • C.分析任务调度日志← 正确答案
  • D.手工阅读需求文档

答案:ABC。血缘发现的三大法宝是静态解析(翻旧档案)、动态追踪(实地走访)和日志分析(查大事记)。手工阅读需求文档既慢又不可扩展,不属于自动化发现手段,而且需求文档也未必反映真实代码逻辑。

Q4. 静态解析血缘主要处理什么对象?

单选题 · mid

  • A.运行时数据的内容
  • B.网络传输的报文
  • C.SQL和存储过程代码← 正确答案
  • D.浏览器用户行为

答案:C。静态解析不运行代码,直接分析 SQL 脚本和存储过程的语法结构,从中提取表与字段依赖。运行时数据内容是动态追踪关注的对象,网络报文和用户行为则与血缘发现没有直接关系。

Q5. 血缘图中出现循环依赖时,工程上推荐的做法是?

单选题 · hard

  • A.直接忽略所有环路
  • B.记录告警并选点断开← 正确答案
  • C.随机删除若干节点
  • D.终止所有任务调度

答案:B。真实数仓难免出现循环依赖,正确做法是识别环路、记录告警,再选择合适断裂点断开,让图谱继续可算。直接忽略会让后续遍历陷入死循环,随机删节点会破坏真实依赖,终止调度则影响业务运行,都不可取。

Q6. 图数据库中遍历血缘图做影响分析,常用算法是?

单选题 · mid

  • A.二分查找算法
  • B.冒泡排序算法
  • C.对称加密算法
  • D.广度优先遍历BFS← 正确答案

答案:D。影响分析需要从被修改节点出发,逐层向外找所有下游节点,天然适合 BFS(广度优先遍历)。二分查找用于有序数组,冒泡排序用于排序,对称加密用于数据加密,都与图遍历无关。

Q7. 从 SQL 中提取血缘依赖时,最关键的子句是?

单选题 · easy

  • A.SELECT 查询列
  • B.FROM/JOIN 子句← 正确答案
  • C.WHERE 过滤条件
  • D.GROUP BY 分组

答案:B。FROM 和 JOIN 子句直接指定了数据来源表,是血缘依赖的核心线索。SELECT 决定输出列,WHERE 决定过滤逻辑,GROUP BY 决定分组方式,它们都不直接表达“数据从哪张表来”。

Q8. 血缘自动化发现的典型应用场景包括?

多选题 · mid

  • A.字段变更影响分析← 正确答案
  • B.数据质量问题溯源← 正确答案
  • C.合规审计下的流转证明← 正确答案
  • D.前端页面的视觉美化

答案:ABC。血缘图能回答“改了 A 影响谁”“坏数据从哪来”“数据经过了哪些加工”三类问题,对应影响分析、质量溯源和合规审计。前端页面美化与数据血缘毫无关系,属于干扰项。

Q9. F1 分数在血缘发现中衡量什么?

单选题 · hard

  • A.精确率与召回率的调和平均← 正确答案
  • B.SQL 脚本执行总耗时
  • C.血缘图谱的存储空间占比
  • D.自动化任务的调度频率

答案:A。血缘发现是一个信息抽取任务,需要同时看“找得准”(精确率)和“找得全”(召回率),F1 是二者的调和平均。执行耗时、存储空间、调度频率都是工程性能指标,不衡量血缘发现的准确程度。

Q10. AI 辅助血缘发现可以做哪些增强?

多选题 · hard

  • A.自动识别隐式的字段依赖← 正确答案
  • B.为血缘边生成描述标签← 正确答案
  • C.用自然语言查询血缘关系← 正确答案
  • D.完全替代人工血缘审核

答案:ABC。AI 能通过向量相似度识别命名不同的同一字段(隐式依赖)、用大模型生成血缘语义描述、用大模型搭建血缘问答。但 AI 仍是辅助手段,血缘结果关乎数据资产安全,最终仍需人工确认,不能完全替代人工审核。