题目重点:从Extract/Transform/Load讲到watermark、late data、幂等和ETL/ELT差异。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 题目明确什么是ETL,可能因简历经历触发;未给源系统/代码,以下订单数据是训练例。
- 训练从业务库到分析仓库,目标可按orderID/版本幂等upsert;append-only目标需另一去重合同。
解题路线
- Extract取源数据,Transform做类型/去重/连接/业务派生/质量校验,Load入目标;ELT先保原始再在目标处理,位置选择受治理、算力、延迟和成本影响,不能称一种绝对更现代。
- 全量简单但成本随历史增,增量按watermark/CDC更高效但要覆盖更新/删除与晚到。event time和ingest time不同,单纯max timestamp可能跳过同时间多行或晚到修订,需复合游标/重叠窗口去重。
- 重试必须幂等:稳定业务键+版本upsert、去重或分区原子替换。checkpoint只在目标提交可恢复后推进;先推进后写失败会丢数据,写成功但ack丢了重试会重复,除非目标幂等。
- 质量规则明确必需字段、类型、范围、唯一性和跨表约束,错误隔离quarantine并可重放。不能一遇坏行就静默丢弃还报告job成功;允许缺失规则要有业务owner。
- 监控端到端freshness、完整性/正确率、失败/重试、费用与上游schema版本。job green不代表仓库没漏一个分区,需对账counts/校验和或业务金额不变量。
- 保原始可追溯数据与变换版本便于backfill,回填不能覆盖新版本正确记录;权限和敏感字段治理贯穿源/中间/目标。公开ETL概念参考https://aws.amazon.com/what-is/etl/,本例恢复合同自拟。
手动走一遍
批次读取游标v100..v200,目标upsert成功但进程在checkpoint之前宕机;恢复重读同批,orderID+version幂等不重复。若先把checkpoint设v200而目标未提交,恢复从v201开始会漏整批。时间游标同秒两条记录还要稳定次序键,不能只存最大时间。
规模与取舍
扫描B条成本至少O(B),join/sort依变换计划;增量降低重复历史扫描但增加checkpoint/CDC状态。吞吐、延迟和故障恢复要核源/队列/目标各瓶颈,不能只报Transform复杂度。
易错点与追问
容易失分的边界
- job成功等于数据正确。
- watermark先推进再写。
- max事件时间覆盖所有晚到。
- 重试append产生重复。
- backfill覆盖较新数据。
继续深挖
- 晚到更新/删除怎样同步?
- 目标没有upsert时怎样幂等?
- schema变更如何兼容旧数据?
- 怎样对账数据完整性?
技术参考
- AWS ETL概念:公开概念/机制参考,本文容量与故障案例自拟;不代表原面试系统。
