完整题目
面对大规模业务场景下的原始数据(如用户行为日志、交易记录等),如何设计自动化流程进行高质量的数据清洗?请说明关键步骤(去重、异常值处理、格式标准化、缺失值填充等)及技术实现方案。
大规模清洗要以数据契约、精确主键和可回放状态为核心
入口建立数据契约和不可变原始层,记录 source、schema_version、event_time、ingest_time、event_id 与血缘。精确去重应优先使用上游生成的不可变 event_id,或由稳定业务键与规范化载荷构成幂等键;“用户 ID 加时间戳”在重试、并发和时间精度冲突下不能通用保证唯一。权威存储保存已处理 ID 或最终实体版本。
Bloom Filter 是近似成员查询结构,可能把从未见过的事件判断为“可能存在”。因此它只能作为预筛:判断不存在时可快速放行,判断可能存在时还要查精确状态;若直接丢弃命中项,会因假阳性误删新事件。Flink keyed state 可按去重键记忆已见事件,但窗口与 TTL 代表有限保留范围,过期后同一 key 会再次被视为新事件,所以必须明确业务去重范围、迟到数据和补数策略。
格式标准化统一编码、时区、单位、枚举和字段类型;异常值按物理约束、业务规则和分位统计识别,并区分真实极端值与错误;缺失值应标记缺失原因,按下游用途选择保留、填充或剔除,避免把填充值冒充事实。流程还要有 quarantine、质量指标、幂等写入、checkpoint、重放和数据版本。上线监控重复率、解析失败、规则拒绝、迟到量、状态规模和下游对账差异,并按来源切片抽检。
继续追问 · 3 个问题
- 如何平衡清洗的严格程度和数据保留率,避免过度清洗导致样本偏差?
- 实时流处理和离线批处理的清洗策略有何不同,如何统一?
- 如何评估清洗后的数据质量,建立反馈闭环?
换一种问法,检查是否真正理解
场景切入
假设你在做电商订单的实时风控,每天几亿条用户行为日志进来,里面经常有重复点击、时间戳乱填、字段缺失的情况。你怎么自动化地把它洗干净,保证下游模型拿到的数据靠谱?
层层追问
你平时处理大规模数据时,怎么保证数据质量?……数据量一上来,去重和异常检测怎么搞?……比如用户行为日志,去重键怎么选?异常值你是直接扔掉还是标记?
直球架构
设计一个面向百亿级日志的数据清洗流水线,需要覆盖去重、异常值处理、格式标准化和缺失值填充,关键步骤和技术实现方案是什么?
练习口述回答 · 30秒速答 + 90秒主答 + 完整展开
- 从数据契约和不可变原始层开始
- 用 event_id 与权威状态做精确去重