想象你是一家大型仓库的负责人。货架上堆着上万箱货物,每箱都贴着一张标签:品名、规格、入库时间、存放货架。总部每周要一份库存清单,你只能派几个工人拿着本子,一个货架一个货架地抄。好容易抄完最后一排,第一批货架又进了新货——你永远在追赶,永远在落后。这就是今天许多公司维护数据资产的真实写照:元数据没人采、采得慢、采不准。 在数据世界里,那些“标签”就是元数据:表名、字段、类型、负责人、变更时间、血缘关系。而元数据采集自动化,就是给仓库装上一套自动扫码系统,让数据资产自己“报数”。这篇文章用仓库做主线比喻,带你从头到尾搞懂:元数据是什么、自动化采集有哪四条技术路线、不同数据源怎么对接、增量采集如何又快又稳、采集失败怎么兜底,以及如何从零落地。读完你就明白,告别手工填表,先从让数据“开口说话”开始。
对 AI 从业者的职业价值:掌握元数据采集自动化,是搭建数据资产目录、血缘系统与合规审计的基座能力,让你从“会查表”进阶到“能治数”,是数据平台与数据治理岗位的硬通货。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
多源元数据采集架构 元数据目录 自动从5类数据源抽取元数据,统一汇入元数据目录 全量采集 vs 增量采集策略 隔离 + 重试 + 死信 + 断点 = 可靠的采集框架 元数据采集自动化可视化:展示多源抽取、增量采集、容错机制及流水线编排监控。
认识元数据:仓库里的货物标签
想象你管理着一座几十万平方米的大型仓库。货架上堆着上万只货箱,每箱都贴着一张标签,写着品名、规格、入库日期、存放货位。总部每周都要你交一份库存清单,你只能派工人拿着本子,一个货架一个货架地抄。抄完最后一批,第一批货架又进了新货——这就是今天许多公司维护元数据的真实写照:不是不想管,而是管不过来。
在数据的世界里,仓库就是数据库和数据仓库,货物就是一张张数据表,“标签”就是元数据:表名叫什么、有哪些字段、字段是什么类型、谁负责、什么时候更新的、数据从哪来。数据治理的第一步,就是把散落在各个系统里的这些“标签”收集起来,整理成一份可查询、可追踪的数据资产清单。
手工维护元数据有三个典型的痛点:第一是慢,几千张表盘点一遍要花好几天;第二是错,纯手写抄录难免漏项和笔误;第三是滞后,业务天天在建新表、改字段,人工清单在抄完的那一刻就已经过期了。自动化采集的思路,就是让程序定时连接各数据源,自动读取表结构、字段注释、分区信息、负责人等信息,统一写入元数据中心,让资产清单自己“长”出来。
就像仓库盘点先要回答“扫到了几成货”一样,覆盖率是元数据采集的起点指标。只有把覆盖面做深做全,后续的血缘分析、权限治理、合规审计才有底气。记住:找不到“标签”,就谈不上治理。
- 分子已采集元数据对象数量:指程序成功从数据源读到的表、字段、索引等对象的个数,对应“已经扫码登记过的货箱数”。
- 分母实际存在的对象总数:指数据源中真实存在的元数据对象总数,可以通过数据库统计或管理员确认得到,对应“仓库里实际摆放的总货箱数”。
- 乘以 100%把比值换算成百分比,方便设定质量阈值,比如要求覆盖率不低于 99%。
采集技术方案:四套扫描设备各显神通
仓库要实现自动化盘点,可以配四样设备:一台固定扫码台(货物过台即扫)、一台巡逻机器人(边走边识别货架)、一批预埋芯片(货物自动上报)、以及供应商的官方发货单接口(直接拉取数据)。元数据采集正好也对应这四种技术路线。
第一,代理抓取模式。部署一个采集代理程序,让它定时连接目标数据源执行查询,把库表信息写回元数据中心,就像把货箱搬到固定扫码台上过一遍。这是目前最主流的方式,适合 MySQL、Oracle 这类提供了系统查询接口的关系型数据库。第二,日志解析模式。通过解析数据库和调度引擎的运行日志,从建表语句、跑批记录中提取元数据变化,相当于翻看发货和搬运记录来反推货物情况,特别适合没有 API、不便改造的老系统。
第三,嵌入式探针。在自研应用里埋入 SDK,数据对象一有变化就主动上报,就像在货箱里预埋芯片,实时性最好但要改业务代码。第四,开放 API 对接。许多现代平台(如 Hive Metastore、云数据集成服务)提供官方元数据接口,直接调用即可,相当于对接供应商的官方发货单,省心又规范。实际项目中往往是“多条腿走路”:主流库用代理,老系统看日志,自研平台埋探针,商业软件走 API。
方案选型没有银弹。就像仓库会根据货物流量、货架形态搭配扫码台和机器人一样,数据源千差万别,四种采集模式组合使用、按需取舍,才能既控制成本又保证时效。
- 主体耗时总量除以速度:C_total 是要采集的元数据对象总数,speed 是采集器每秒处理的速度,两者的商对应“扫码台处理完所有货需要的时间”。
- 额外开销t_overhead:包括建立连接、鉴权、网络传输损耗等固定成本,对应“开机、摆货、归位的准备时间”。
- 两者相加得到 T一个采集周期的总时长,用来判断现有方案能否支撑每日/每周的采集计划,不够就要换更快的“设备”。
数据库源对接:找到每个库的标签抽屉
仓库里有横梁货架、抽屉柜、冷库区,扫码的方式必须跟着货架形态调整。数据库也一样:MySQL、PostgreSQL、Oracle、Hive,各自的“标签抽屉”位置不同,对接的姿势也不同。
主流关系型数据库都内置了系统元数据表。MySQL 有 information_schema,PostgreSQL 有 pg_catalog,Oracle 有 all_tables、all_tab_columns 等数据字典视图。采集器只需要用一个最小权限的只读账号,查询这些系统字典表,就能拿到库、表、字段、索引、注释等全套信息,完全不需要业务方配合。这就是“找到标签抽屉,把标签批量拿出来”。
对于数据仓库(如 Hive),元数据统一存放在 Metastore 里,可以通过连接 Metastore 的存储库查询,或者调用 Hive Metastore 的 Thrift 接口读取。大规模场景下,一次查询可能返回几十万行,必须做分页拉取,避免查询超时拖垮数据源。另外还要注意:系统字典表只能拿到“技术元数据”,业务负责人、部门归属这类“管理元数据”,往往需要结合团队登记信息做一次关联补充。
对接数据库源,核心就是“知道标签贴在哪个抽屉里”:找对系统字典表、配好只读账号、做好分页限流,一套采集器就能稳定跑遍全部关系库和数仓。
- 页码减一page 从 1 开始,转换为偏移量要先减 1,对应“跳过前面几排货架”。
- 乘以每页行数pageSize 控制单次返回的数据量,比如每页 5000 行,保证大库也能稳定拉取不超时。
- 得到偏移量 offset作为 SQL 中 LIMIT offset, pageSize 的参数,实现分批搬运元数据。
ETL任务采集:读懂流水线上的搬运单
仓库里除了货物本身,还有一条条流水线:从收货区搬到拣货区,再运到出库区,每一步都有搬运单据。ETL 任务就是数据仓库里的流水线,它决定了数据怎么从 ODS 明细层流转到 DWD 清洗层、再汇总到 DWS 服务层。只知道“货架上有货”还不够,还得知道“货是怎么搬来的”。
ETL 调度工具(如 Airflow、DataWorks、Informatica)会保存完整的任务定义:源表、目标表、调度频率、转换 SQL。采集器读取这些任务定义,就能还原出数据血缘关系(Lineage)——每个表的上游是谁、下游是谁。血缘一旦打通,做影响分析和问题溯源就像顺着搬运单查货一样简单。
血缘解析通常分三步:一是读取调度配置,得到作业之间的依赖关系;二是解析任务 SQL 中的 insert into ... select from 语句,提取输入表和输出表;三是拿历史日志对账,把漏掉的依赖补全。技术实现上,SQL 解析可以用词法分析器配合正则,复杂场景则需要引入语法树解析;调度依赖则直接从 DAG 配置里读取。这两类信息合并,就是一张完整的“数据搬运地图”。
有了血缘,仓库里每一箱货的来龙去脉都清清楚楚:某个上游表结构变了,顺着血缘图就能标出所有受影响的下游表和报表,运维从“漫无目的地查半天”变成“看图一秒定位”。
- 上游集合 upstream(t)表 t 的直接上游表集合,即“这张表的货是从哪些货架搬来的”。
- 取最大深度在所有上游表深度中取最大值,表示血缘树中最长的那条依赖链,像供应链里最长的搬运链路。
- 加一递归每经过一层 ETL 变换深度加一,从源系统表(深度为 0)逐层传导到下游。
报表工具采集:把看板上的指标也管起来
仓库管理员不光管货,还要给老板出经营报表。报表工具(如 Tableau、Superset、帆软)里配置的图表、数据集和指标,同样是一类重要的元数据——它们是离业务最近的一层“标签”。
报表元数据主要包括四类:报表目录结构(哪张报表归哪个部门)、数据集映射(报表用的数据集对应哪张物理表)、指标口径(“销售额”的公式是什么)、权限模型(谁能看这张报表)。把这一层纳入采集范围,数据资产目录就从“表清单”升级成“业务看板地图”,业务人员可以直接检索自己关心的报表和指标。
采集流程通常是:调用报表工具的管理 API 拉取报表清单 → 逐个解析数据集里嵌的 SQL → 建立“报表-数据集-物理表”三级映射 → 把指标的口径文本和权限配置一并登记入库。这里有一个非常典型的坑:指标口径经常“同名不同义”——A 报表的“活跃用户”按登录算,B 报表的“活跃用户”按下单算。采集时如果只记名字不记口径,后面做指标治理就会互相打架。
把报表指标纳入采集范围后,业务人员问“这个数从哪来的”,你不再需要翻文档、问同事,打开资产目录就能一键查到物理表、口径和负责人。这就是“标签”从货架延伸到经营看板的意义。
- 分子已完成映射的数据集数:指已经成功确认“数据集→物理表”对应关系的数量,对应“已经标清楚来源货架的商品”。
- 分母数据集总数:报表平台中全部数据集的数量,需要从工具的管理接口统计,对应“在售商品的总数”。
- 乘以 100%得到报表层采集的完成率,低于阈值时优先补采缺失的数据集映射。
增量采集策略:只扫新入库的货
全仓盘点一次要三天,但每天真正新入库的货可能只有几十箱。聪明的管理员会设一条“水位线”:上次清点到的最晚入库时间,下次只从这条线往后扫。增量采集的核心思想,就是维护这样一条只涨不跌的水位线。
全量采集(周期快照)简单可靠,适合数据量小或首次接入的场景;但当表数量上万、单表 metadata 又大时,每次全量扫描既慢又浪费资源,频繁大查询还会影响生产库性能。因此工程上普遍采用“增量为主、全量校准”的组合策略:平时只采集变化的部分,每周或每月再做一次全量对账,防止增量漏采积累成数据黑洞。
实现增量的常见手段有三种:第一种基于时间戳比对,拿对象的 update_time 和上次记录的水位线比较,超过水位线就采集;第二种基于数据库日志(如 MySQL binlog、CDC 工具),捕获 insert、update、delete 事件,实时性最强;第三种基于版本号或内容哈希比对,适用于没有可靠时间戳的系统。时序上要注意:同一批次内靠后完成的任务,可能把水位线推得很高,如果任务失败回滚,下一轮就会漏掉这一批,所以“采集完成后再推进水位线”是铁律。
如果说全量采集是“愚公移山式地反复盘点”,增量采集就是“在仓库门口画一道今日入库线”。有了水位线,每天的采集从几个小时压缩到几分钟,而且越跑越省——这就是自动化的效率红利。
- 本轮采集集合 collected_t第 t 轮实际采集到的元数据对象集合,对应“这轮新扫到的货箱”。
- 每个对象的修改时间 update_time(o)对象最后一次被修改的时间戳,对应“货箱上最新的入库日期标签”。
- 取最大值作为下一轮水位线水位线只涨不跌,下一轮只处理修改时间大于水位线的对象,避免重复采集。
容错与监控:扫码没电了怎么办
再好的扫码设备也会出状况:标签太脏扫不出来、机器断电、网络闪断。有经验的管理员不会干等,而是提前设计好重试、报修和人工复核流程。元数据采集跑在复杂的分布式环境里,网络抖动、权限变更、源库字段调整都可能导致采集失败,容错机制必不可少。
容错体系至少要覆盖四层:失败重试、失败告警、数据校验和操作审计。失败重试不是拼命重试,而是采用指数退避策略,让等待时间逐次翻倍,避免失败瞬间所有任务集中重试、把数据源压垮;连续失败达到阈值就触发告警,并把这个数据源放入补偿队列,等网络恢复后再补采。
数据校验指抽检对账:定期在源端统计“对象总数”,和元数据中心的数量比对,不一致说明存在漏采或错采。审计日志则记录每次采集的范围、耗时、成功与失败的数量,一旦线上数据出问题,可以追溯是哪一轮采集、哪个数据源、哪一步操作导致的。这三层缺一不可:没有重试,偶发故障直接失败;没有告警,失败没人知道;没有校验,错误数据悄悄进入资产目录。
容错设计决定了采集系统的“皮实程度”。就像仓库不能因为一台扫码机坏了就全仓停摆,元数据采集必须容忍局部失败、自动恢复、全程留痕,才能真正做到无人值守。
- 基础等待 base第一次重试前的等待时间,比如 30 秒,相当于“先歇口气再试一次”。
- 指数放大 2^(n-1)第 n 次重试的等待时间翻倍增长,避免海量任务在同一时刻疯狂重试。
- 第 n 次等待 delay_n实际工程中通常还要设一个上限(如 10 分钟),防止等待过久导致积压。
落地实践:从试点货架到全仓自动化
给仓库装自动化系统,不能一上来就全仓改造:先挑一个货架区试点,流程跑顺了再逐步铺开,最后建立日常运维制度。元数据采集的落地,遵循同样的节奏。
第一步是选型与试点。开源方案可以选 Apache Atlas、DataHub,商业方案有各大云厂商的数据治理产品;如果只想快速验证,也可以自研一个轻量采集器加统一存储。先选 1-2 个核心业务库接入,验证采集脚本的正确性和调度稳定性,同时把“覆盖率、成功率、采集延迟”三个指标跑起来。第二步是全面推广,把 ETL 任务、报表工具、数仓分区陆续接入,所有数据源统一登记、统一调度。第三步是持续运营:定期 review 水位线是否合理、有没有数据源权限变更、新库新表有没有及时接入,把“新数据源接入”固化成标准流程。
质量保障方面,三个指标分别盯住三个角度:覆盖率代表“有没有漏采”,成功率代表“跑得稳不稳”,延迟代表“及不及时”。这三个指标都要落到监控看板上,低于阈值自动告警。投入产出上,别只算开发成本,要算节省的人工工时:以前 DBA 每周花两天手工统计表清单,自动化后每天凌晨自动完成,一年省下的工时远超开发成本。
落地实践的本质是“先建一条示范流水线,再复制到全仓”。当你把选型、试点、推广、运营四个环节走顺,元数据就会像自来水一样,每天自动流进资产目录,数据治理从此告别手工填表。
- 手工采集总耗时 N×T_manualN 次盘点每次花 T_manual 小时,代表原本的持续投入。
- 自动采集日常开销 N×T_auto自动化后每次采集运行、核对、修复消耗的时间,通常远小于手工耗时。
- 一次性建设成本 T_build开发采集器、对接数据源、搭建调度监控的前期投入,相当于“购买扫码设备的钱”。
- 差值 saved_hours节省的总工时,用数字说服团队和领导“这笔自动化投入值不值”。
AI 应用场景
数据资产目录的每日自动刷新
阶段:数据治理
解决的问题:传统做法是 DBA 每周手工统计库表清单再用 Excel 汇总,月底才能出一版目录,且永远滞后于实际变更。自动化采集让目录每天自动更新,业务人员随时能查到最新、最准确的数据资产。
具体案例:某零售企业数据平台有 8000 多张表和 300 多个 ETL 任务。引入采集器后,每天凌晨 2 点自动从 Hive、MySQL 和调度平台抓取元数据,早上 8 点前资产目录同步完毕。上线后,找一张表从“问三个人等半小时”变成“搜索一秒出结果”。
上游变更影响分析
阶段:数据运维
解决的问题:上游表结构变更导致下游报表数据异常时,人工排查耗时极长。通过 ETL 血缘采集,把“表-任务-报表”的依赖关系建成图谱,一次变更能自动标出全部受影响的下游对象。
具体案例:某金融公司开发同学修改了 ods_orders 表字段类型,血缘系统自动标红 17 个下游任务和 5 张报表。运维团队 10 分钟完成通知、评估和修复,避免了以往“数据错了三天才发现”的事故。
合规审计敏感数据清单生成
阶段:数据合规
解决的问题:监管审计要求提供敏感数据分布清单,人工梳理容易漏报。自动化采集的字段级元数据,配合规则匹配,能自动生成含身份证、手机号等敏感字段的表清单。
具体案例:某支付公司按监管要求盘点全库敏感字段。采集器把表名、字段名、注释批量拉取后,用正则规则匹配“id_card、phone、身份证”等关键词,产出敏感数据分布报告,审计准备时间从两周缩短到一天。
Python 演示
# -*- coding: utf-8 -*-"""元数据自动采集演示: 模拟从数据源读取元数据并做增量同步"""class MetadataSource: """模拟一个数据库元数据源, 内部存有若干表的元数据""" def __init__(self): self.tables = [ {"name": "orders", "schema": "ods", "rows": 100000, "update_time": "2025-06-01 10:00:00"}, {"name": "users", "schema": "ods", "rows": 50000, "update_time": "2025-06-01 09:30:00"}, {"name": "payments", "schema": "dwd", "rows": 200000, "update_time": "2025-05-31 18:00:00"}, {"name": "refunds", "schema": "dwd", "rows": 3000, "update_time": "2025-06-01 08:00:00"}, ] def list_tables(self, since=None): """返回表清单, 可传时间戳做增量过滤""" result = [] for table in self.tables: if since is None or table["update_time"] > since: result.append(table) return result class MetadataCollector: """采集器: 每次只抓取更新时间大于水位线的元数据""" def __init__(self, source, store): self.source = source self.store = store self.watermark = "1970-01-01 00:00:00" def run_once(self): """执行一次采集, 返回本轮采集到的对象数""" changed = self.source.list_tables(since=self.watermark) collected = 0 new_watermark = self.watermark for meta in changed: if meta["update_time"] > new_watermark: new_watermark = meta["update_time"] self.store[meta["name"]] = meta collected += 1 self.watermark = new_watermark return collected def main(): store = {} source = MetadataSource() collector = MetadataCollector(source, store) print("第一次运行: 水位线为初始值, 执行全量采集") count = collector.run_once() print("采集到 %d 张表的元数据, 水位线=%s" % (count, collector.watermark)) print("\n模拟业务新建一张表...") source.tables.append( {"name": "trade_flow", "schema": "dws", "rows": 8000, "update_time": "2025-06-02 11:00:00"}) print("第二次运行: 执行增量采集") count = collector.run_once() print("采集到 %d 张表的新元数据" % count) for name in sorted(store): meta = store[name] print(" - %s.%s 行数=%s" % (meta["schema"], name, meta["rows"])) print("当前水位线=%s" % collector.watermark) if __name__ == "__main__": main()
def list_tables(self, since=None):模拟数据源的查询接口,since是可选的时间过滤条件,对应真实环境里“只查变更过的表”的 SQL。if since is None or table["update_time"] > since:水位线为空时返回全部表(首轮全量),否则只返回更新时间更晚的表(增量过滤)。self.watermark = "1970-01-01 00:00:00"初始水位线设成远古时间,保证第一轮能采到全部元数据,就像“第一次盘点从仓库创建之日算起”。changed = self.source.list_tables(since=self.watermark)采集器只向数据源要“比水位线新的货”,大幅减少每次拉取的数据量。if meta["update_time"] > new_watermark:一边采一边推进水位线,比全部采完再更新更稳,防止任务中断后漏采。self.watermark = new_watermark本轮结束把水位线落盘(真实系统会持久化),下一轮从这个新水位线继续扫。
常见误区
误区我以为学会 `select * from information_schema.tables` 就算是会做元数据采集了,查一次就完事,很简单。
正解真实生产环境远不止一条 SQL:要对接多种数据库、抓 ETL 任务血缘、同步报表工具指标,还要处理增量、权限、超时、字段变动。信息结构查询只是一个起点,就像知道货架位置不等于会管理整个仓库。只有把“查标签”升级成“建采集流水线”,才算真正落地。
为何常见:网上教程大多展示单库单表的查询示例,容易让人产生“元数据采集 = 写几条 SQL”的错觉,忽略了工程化的复杂性。
误区我觉得增量采集太复杂,万一水位线出问题就漏数据了,不如每天把全部元数据重扫一遍,简单又安心。
正解全量采集的成本随数据量线性增长,上万张表每天全扫既慢又耗费生产库资源,还可能因为查询过重拖垮源端。正确的工程实践是“增量为主 + 定期全量校准”:平时用时间戳或日志做增量,每周做一次全量对账兜底。增量漏数据的风险,完全可以用“采完再推水位线 + 定期校准”双保险来控制。
为何常见:人对“丢东西”的恐惧远大于“多花点时间”,所以本能倾向全量;但忽略了全量在规模放大后本身会变成新的故障源。
误区我觉得失败不可怕,只要不停地重试,总能成功,所以不设重试上限,一直循环重试。
正解无限重试会让大量失败任务在同一时间点集中打向数据源,形成“重试风暴”,反而把已经脆弱的源系统压垮。正确做法是:指数退避拉开重试间隔,设置最大重试次数,超过阈值就告警并把任务放进补偿队列,等系统恢复后再补采。重试是手段,不是信仰。
为何常见:把人类的“坚持不懈”错误地映射到系统行为上,没有意识到系统的重试是有代价的,会放大故障而不是消除故障。
误区我以为把采集器部署好、跑通一次,元数据就会一直准下去,以后不用再管了。
正解数据世界是动态的:业务天天建新表、改字段、调任务,数据源的账号权限会变,平台的 API 会升级。所以采集系统需要持续运营:定期校准水位线、巡检覆盖率指标、把新数据源接入做成标准流程,还要有人对采集失败负责。元数据采集不是一次性工程,而是和仓库一样需要每日维护的永续系统。
为何常见:把元数据当成静态资产,忽略了自己采集的对象本身就是高频变化的,运营思维缺位。
面试题
Q1. 以下对元数据最通俗的理解是?
- A.描述数据的数据,如表名、字段、血缘← 正确答案
- B.数据库中的用户业务数据
- C.数据仓库的专职存储引擎
- D.数据报表的图表样式定义
答案:A。元数据是“关于数据的数据”,就像贴在货箱上的标签,记录品名、规格、来源。业务数据是货物本身,存储引擎是货架,图表样式是装饰,它们都不是描述性标签,所以选 A。
Q2. 以下哪一项不是手工采集元数据的典型痛点?
- A.采集速度慢,无法应对海量表
- B.容易抄错、漏记、张冠李戴
- C.清单跟不上业务的变更速度
- D.无需任何成本且精准无比← 正确答案
答案:D。手工采集的痛点恰恰是慢、错、滞后,D 描述的“零成本且精准”与事实完全相反。用仓库比喻来说,靠人抄标签既费人力又抄不齐,D 是最不可能成立的选项。
Q3. MySQL 中查询库表元数据通常使用什么方案?
- A.通过查询系统模式库实现
- B.通过查询 PG 系统目录实现
- C.通过查询信息结构库实现← 正确答案
- D.通过查询数据字典库实现
答案:C。MySQL 的标准做法是查询 information_schema,直译就是“信息结构库”。PG 系统目录属于 PostgreSQL,数据字典视图更多见于 Oracle。不同数据库的“标签抽屉”位置不同,这也是对接数据源时要查官方文档的原因。
Q4. 增量采集中所说的“水位线”指的是?
- A.上次采集到的最大变更时间← 正确答案
- B.数据源服务器的内存水位
- C.数据表行数的合理上限
- D.数据库连接池的最大大小
答案:A。水位线是增量采集的核心指针,记录上一轮采到的对象最新修改时间,下一轮只处理比它新的变更,就像仓库门口“今日新入库”的标记线,只涨不跌。它与内存、行数、连接池无关。
Q5. 对一个没有 API、不便改造的老旧系统做元数据采集,最合适的方式是?
- A.嵌入式探针埋点上报
- B.依赖人工定期登记
- C.日志解析模式采集← 正确答案
- D.开放 API 对接拉取
答案:C。老系统既没有开放接口,也不便埋点,最现实的办法是解析它运行产生的日志,从建表、变更记录中提取元数据,相当于从发货记录里反推货物流向。埋点和 API 都要系统配合,人工登记又回到手工模式。
Q6. 指数退避重试策略的核心思想是?
- A.重试间隔随次数指数增长← 正确答案
- B.重试间隔保持恒定不变
- C.失败后立即无上限重试
- D.直接放弃所有失败任务
答案:A。指数退避让第 n 次重试前等待 base×2^(n-1),间隔翻倍增长,目的是避免大量失败任务同时重试造成“重试风暴”。恒定间隔会让重试集中、无上限重试会压垮源端,直接放弃则完全丢失容错能力。
Q7. 采集到一张核心业务表后,想快速知道它影响了哪些下游报表,应该怎么做?
- A.查询信息架构系统表
- B.等待业务人员手工反馈
- C.检索数据库连接日志
- D.分析数据血缘依赖关系← 正确答案
答案:D。血缘关系是把 ETL 任务、数据集、报表串起来的依赖图谱,分析血缘能一键标出下游影响范围,类似顺着仓库搬运单找到所有流向。系统表只有静态结构,连接日志只记录访问行为,无法表达完整的业务依赖。
Q8. 以下哪些属于元数据采集的对象?
- A.表结构与字段注释← 正确答案
- B.ETL 调度与血缘信息← 正确答案
- C.报表平台的指标口径← 正确答案
- D.普通用户的登录密码
答案:ABC。表结构、字段注释、ETL 调度、血缘、报表指标口径都是描述数据资产的“标签”,全部应该采集。登录密码属于敏感业务数据,采集它既不合规也毫无必要,类似于登记货箱时去抄工人的私人物品。
Q9. 增量采集的常见实现方式有哪些?
- A.基于更新时间戳比对← 正确答案
- B.基于变更日志的解析← 正确答案
- C.基于版本号和内容哈希← 正确答案
- D.每次全量删除后重灌
答案:ABC。时间戳比对、变更日志(binlog/CDC)、版本号或哈希比对都能只识别变化的部分,都是增量采集的常用手段。“全量删除后重灌”每次重建整个目标,属于全量快照而非增量,成本高且会造成采集窗口不可用。
Q10. 下列哪些措施能提升元数据采集系统的稳定性?
- A.失败重试与指数退避← 正确答案
- B.对象总数校验比对← 正确答案
- C.采集操作审计日志← 正确答案
- D.静默忽略所有失败
答案:ABC。指数退避让偶发故障自动恢复,总数校验能发现漏采错采,审计日志让每次采集可追溯,三者缺一不可。“静默忽略所有失败”会让错误悄悄进入资产目录,与稳定性完全背道而驰,就像仓库丢了货还不记账。