1. 题目与适用场景
这道题考察数据平台、数据工程和分析工程岗位。重点是观察数据本身的健康度与影响范围,而不只是确认调度任务是否成功。候选人需要说明监控维度、基线、责任人、告警分级和修复闭环。
2. 面试官考察点
- 能否把“可观测”拆成新鲜度、数量、结构、完整性、分布、唯一性和关系一致性。
- 能否按数据集用途、血缘和业务影响设置不同规则,而不是给所有表一个阈值。
- 能否保存规则版本、观测值和运行证据,区分硬失败、警告与尚未判断。
- 能否把告警接到隔离、回填、对账和复盘,而不是只发一条消息。
MentorCruise 的公开数据工程面试材料直接询问 data observability,并列出 freshness、volume、schema drift、null、duplicates、distribution 和 lineage 等信号。Great Expectations 文档把 distribution、freshness、integrity、missingness、schema、uniqueness 和 volume 列为数据质量用例,并将 Expectation 定义为可验证的数据断言。
3. 回答前需要澄清的问题
- 关键数据集服务报表、结算、推荐还是训练?允许的延迟和错误影响是什么?
- 数据是批处理、流式还是两者混合?业务时间与到达时间如何定义?
- 哪些检查失败要阻断发布,哪些只需标记为警告?是否有可信快照可降级?
- 谁拥有数据集、血缘和告警?修复后需要回填哪些分区并通知哪些消费者?
4. 30 秒回答框架
我会先按业务影响给数据集分级,再为每个关键资产定义新鲜度、数量、结构、完整性、分布和关系检查。每次运行保存规则版本、批次、观测值、血缘和负责人;结果按阻断、警告和信息分级路由。下游读取质量状态,必要时隔离坏批次或使用带时间戳的可信快照。修复后重跑同一版本的检查,按输入、输出、拒绝和消费记录对账,并在复盘中调整阈值。
5. 分步骤深入解答
第一步:定义资产与重要性
为表、主题、文件或模型输入建立稳定标识,记录负责人、消费者、敏感级别和血缘。先覆盖结算、客户可见指标等高影响资产,再扩展到低风险数据;否则检查成本和告警数量会失控。
第二步:选择互补的观测维度
新鲜度检查最新业务时间和到达时间;数量检查行、文件或字节量;结构检查字段、类型和兼容性;完整性检查必填值、重复和引用关系;分布检查范围、分位数或类别频率。每个指标都保存样本量、窗口、阈值和规则版本,避免把一个分数当成整体真相。
第三步:让检查可执行且可解释
把声明式断言与自定义查询放入代码审查和部署流程。关键规则配置严重度、失败动作和责任人;低流量或季节性资产使用基线和连续窗口抑制误报。结果写入质量账本,并关联具体分区、运行、上游变更和下游影响。
第四步:连接告警、隔离与恢复
阻断会污染财务或模型的数据发布,局部缺失可先隔离并保留上一份可信快照。告警带上资产、维度、观测值、阈值、血缘和建议动作。上游修复后按业务时间回填,使用幂等写入和输入输出对账验证没有漏数或重复。
6. 高质量示范回答
我会先按业务影响给数据资产分级,并为高影响资产登记负责人、消费者和血缘。每次加载都检查到达时间与业务时间、行数或字节量、schema、必填字段、重复、引用关系以及关键数值分布。检查结果保存规则版本、批次、样本量、观测值和下游影响,严重度决定阻断、警告或信息通知。
如果结算表的完整性失败,我会隔离该批次并阻止发布;独立看板可以使用带时间戳的上一份可信快照。告警包含具体失败维度和可能的上游变更,避免只报一个总分。修复后按分区回填,重跑相同检查,用输入、输出、拒绝和消费记录对账,确认指标恢复后关闭事件。最后用误报、漏报和处理时间复盘阈值与覆盖率。
7. 常见错误
- 只看 DAG 是否成功,不看数据是否新鲜、完整和可用。
- 给所有资产套同一阈值,忽略消费者、季节性和样本量。
- 没有保存规则版本、批次和血缘,导致告警无法复现。
- 每个失败都阻断全平台,或每个失败都自动重跑而污染下游。
- 修复后覆盖历史,不记录回填、对账和重复写入保护。
8. 追问及应对
追问一:数据质量和数据可观测性有什么区别?
质量检查验证某个断言是否成立;可观测性还要把健康信号、运行上下文、血缘、责任人、影响和处置动作串起来。质量是信号之一,不是完整运行闭环。
追问二:如何减少误报?
建立按资产和分群的历史基线,记录样本量,使用连续窗口和分级严重度,并在影子模式观察新规则。每次调整保留旧规则版本,复盘误报成本后再改变阈值。
追问三:检查失败时一定要阻断吗?
按影响和血缘决定。会污染结算、客户承诺或模型训练的失败应阻断相关发布;低风险消费者可以读取带警示的可信快照。阻断范围、超时升级和解除条件都要可审计。