周一上午,运营打开报表发现某地区订单为零。调度界面却显示昨晚任务绿色。数据岗面试把这两条事实放在一起,是想看候选人能否拆开执行状态、数据完整度和业务结论。dbt 文档介绍了以加载时间和阈值检查来源新鲜度的配置。BigQuery 的分区和作业元数据则提供不同层级的线索。知道怎样同时读这些信息,比背某个工具名更贴近工作。 dbt 来源新鲜度 · BigQuery 分区信息 · 作业信息
把三个时间放在一条线上
教学题设定,订单事件在周日发生,源系统约定周一早上六点前交完周日批次,报表七点刷新。事件时间用于判断订单归哪天。加载时间记录数据何时抵达分析库。刷新时间说明下游何时读到了哪些内容。报表可以在七点成功刷新,但源系统的一批数据尚未到达。单看最新加载时间也有陷阱,某个小地区先到了一批新数据,最大时间很新,其他地区仍缺。
面试先问业务期望何时能使用数据、哪些来源必须到齐,是否存在允许迟到的时段。比如周末的部分门店会在次日上午才传文件,阈值就要按业务约定设。比较时统一时区,避免同一个午夜在源系统和分析库里被算到不同日期。给出时间线后,再问面试官是否知道零值所在地区的加载记录。
沿数据路径找最早断掉的一步
| 检查位置 | 要找的信息 | 可能的判断 |
|---|---|---|
| 源头清单 | 今天应有哪些地区、批次和文件 | 东区文件预计到达但尚无确认 |
| 原始落表 | 分区时间、各地区数量、接收日志 | 西区有新分区,东区没有对应行 |
| 转换任务 | 实际处理日期、筛选条件与输出行数 | 任务成功处理了已到的数据 |
| 仪表盘 | 最近刷新、口径和空值显示 | 空地区被展示为零 |
查询分区时要读清时间戳含义。表的分区最后写入时间可以帮助发现它曾被更新,不能单独说明更新的每一批都完整。查询作业日志时,也别只拿“成功”判断接收范围。可以将预期到达清单与实际记录按业务日和来源比对,查缺失和重复。如果没有可用清单,先对照源系统能确认的批次或业务侧统计,写明目前能证明到哪里。
给业务一个可以当场使用的说明
面试官扮演运营,说马上要拿表安排库存。可以回复:“周日的东区订单暂时不全,报表中的零不宜作为需求下滑使用。西区已经核对到批次和计数。我会在九点复核东区到达情况,并同步什么时候可以重跑。”这段话把范围、证据和下一次动作都说清楚。若只知道东区缺失,别把其他所有地区也说成正确;可以先讲已核实的两个来源,再补查剩余范围。
报表界面可以显示最后完整的业务日期和各来源是否齐全。当处理状态尚未知时,让用户看到“待更新”比自动沿用上次数字更容易避免误判。若报表用于对外周报,可以在稿件上注明数据截止和暂缓更新的图表。不同用途的可用标准不一样,日常参考与正式对账需要在发送前核对清楚。
补数前写清楚重跑的范围
假设东区周日文件九点到,先校验文件版本、记录数和业务日期,再只重算缺失的分区或受影响范围。若模型每次追加写入,相同批次多跑一次可能翻倍。可以基于业务主键合并,或在能明确控制范围时重建该分区。写入规则要覆盖同一个订单的修订记录,确认哪个版本有效,不能只按加载先后来覆盖全部状态。
补数后检查东区数量与源头清单一致,西区数字保持正常,报表能在预期窗口刷新。再跑一次相同批次,确认数据条数和金额不再增长。若任务在写到一半时失败,说明重新执行从哪个可验证的状态开始。必要时先在隔离表上对照结果,再按团队权限更新生产表。动作本身要和数据影响范围匹配。
增加一个比最大时间更实用的检查
已有来源新鲜度检查可以帮助知道某张表多长时间未加载数据。要捕获只有一部分迟到的情况,可以另外维护预期地区和批次,检查对应业务日是否至少有一条已完成记录,或与确认文件清单核对。对允许空批次的来源,成功的空批次也应该有明确的完成标记。否则业务真的为零时,会与文件没来的情形混在一起。
将告警内容写成值班同事能处理的格式。写清哪个来源、哪个业务日、期待什么、实际看到了什么、下游有哪些报表。若迟到达到第二个阈值,可以通知业务负责人;如果很快补齐,仍记录持续时间。别让每次小延迟都触发同样级别的告警,否则真正缺失时容易被忽略。阈值由数据可用时间和用户决策倒推。
做一轮包含迟到和重复到达的演练
用四行模拟记录:西区周日两条,东区周日两条。先只加载西区,运行转换。预期报告显示西区完成、东区待到齐。然后加载东区并修复一次,查看总量为四。把东区文件原样再次提交,总量仍应是四。最后将东区的一条放到周一事件时间,核对周日分区不应该算入它。将每次运行前后的实际输出保存下来,这组材料就能支撑面试里有关去重、时间口径和补数的连续追问。
如果自己只负责报表端,同样可以练这个案例。写一条给上游的检查请求,列出业务日期、疑似缺失范围、首个发现时间和一条受影响记录。对方向你回复源文件已经完成时,继续问落表是否成功,直到确认能恢复展示。面试官因此能看到你怎样协作,而不只是会从自己管理的系统里找日志。
当数据源真的没有业务时怎样区分
面试官可能改变题设,告诉你东区星期日没有营业。此时预期到达清单里可能仍有一份空文件,也可能由日历明确标为无需发送。可以先找源系统的完成标记和营业日历,再决定该地区应该显示零还是待更新。假如当天恢复临时营业,就需要更新预期来源规则。把预期可配置化以后,可以同时覆盖法定假期、门店临停以及渠道切换等情况。单纯按昨天各地区都有值推断今天也有数据,很容易在真正停业时误报。
再模拟一个空文件与缺失文件的对照。周日东区上传一份已签收、零行的文件,周一东区仍没有传。前者可根据已确认的业务日历与完成状态展示零,后者保持待补。让同学拿着你的报表说出两天分别能做什么决定。如果看不出差别,就修改标签、最后完整时间或备注位置。这个练习还可以变成面试用的缺陷记录,展示你怎样从用户误读倒推数据检查。
最后问团队一项长期可观测指标,比如多少个应到分区在约定时间到齐。它直接连接数据 SLA 和业务时间。每周回看哪一类来源迟到频繁,再选择是否调整阈值、安排上游交接或改善补数。用实际失败分布调整规则,比仅有一个不断变动的总成功率更容易行动。
常见问题(FAQ)
作业状态成功说明当天数据已到齐吗?
作业成功只表示这次执行达到相应运行状态。要另外确认所需来源、时间窗、行数和下游刷新。
没有数据时该显示零吗?
先区分业务确实为零与数据尚未到齐。未到齐的值可标明待更新,避免业务拿它做比较。
怎样说明补数可以安全重跑?
写明业务日期和写入粒度,验证重复执行后结果不增加,并检查只修复了目标范围。
- Source freshness· dbt Labs
- PARTITIONS view· Google Cloud
- JOBS view· Google Cloud
带一条数据流程,梳理如何看源头、落表、指标和报表,再练一次补跑验收。
