设计一条从业务库到数仓的日更 ETL 链路,你会怎么做?
ETL调度增量同步
考察意图
数据工程师招牌题。考察端到端链路设计:抽取、落地、质量、调度与失败恢复。
回答框架
- 目标与约束:延迟、完整性、回放能力。
- 架构分层:ODS → DWD → DWS → ADS。
- 增量策略:时间戳/binlog/快照对比。
- 调度、监控、补数与幂等。
参考答案(口述版)
按分层与可靠性讲:
- 需求:日更 T+1,核心表 6:00 前就绪;可按日重跑。
- 接入 ODS:优先业务库只读账号;大表用增量(updated_at 水位或 binlog CDC);小表可全量。落地分区表
dt=YYYY-MM-DD,保留原始字段。 - 清洗 DWD:统一时区/枚举、去重(按业务主键取最新)、敏感字段脱敏、主键与外键校验。
- 汇总 DWS/ADS:按主题建明细与汇总,供指标与看板。
- 调度:依赖上游就绪信号;失败重试;关键路径报警。
- 可靠性:任务幂等(同分区可重跑覆盖);DQ 门禁不通过不交付下游;文档化口径与 owner。
加分:提到迟到数据、幂等去重、schema 演进、成本(分区裁剪与小文件合并)。
关键词
ODS/DWD/DWS增量水位幂等分区DQ 门禁
面试官可能的追问
追问 1:如何保证重跑不产生重复数据?
以分区覆盖写或 merge into;去重键明确;避免 append-only 无去重。CDC 场景用主键+版本号取最新。
常见踩坑
- 直接在业务库跑重查询当数仓
- 无分区、不可重跑,一次失败只能手工修
记忆锚点
分层解耦;分区可重跑;质量门禁后再交付。