#10 数据工程 困难

设计一条从业务库到数仓的日更 ETL 链路,你会怎么做?

ETL调度增量同步

🎯 考察意图

数据工程师招牌题。考察端到端链路设计:抽取、落地、质量、调度与失败恢复。

📐 回答框架

  1. 目标与约束:延迟、完整性、回放能力。
  2. 架构分层:ODS → DWD → DWS → ADS。
  3. 增量策略:时间戳/binlog/快照对比。
  4. 调度、监控、补数与幂等。

💬 参考答案(口述版)

按分层与可靠性讲:

  • 需求:日更 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 场景用主键+版本号取最新。

⚠️ 常见踩坑

  • 直接在业务库跑重查询当数仓
  • 无分区、不可重跑,一次失败只能手工修

🧠 记忆锚点

分层解耦;分区可重跑;质量门禁后再交付。