数据采集与 ETL
extract/transform/load、批处理模式。
40 分钟
数据采集与 ETL
ETL(Extract → Transform → Load)是批处理数据管道的经典模式;现代栈也常写 ELT(先加载到数仓再 SQL 转换)。本课建立批处理采集的设计直觉。
学习目标
- 理解 Extract / Transform / Load 各阶段职责
- 掌握全量、增量、快照等批处理模式
- 能设计一个从 MySQL 到 staging 表的日常任务
ETL 三阶段
Extract — 从源系统读(JDBC、API、文件、日志)
Transform — 清洗、类型统一、去重、业务规则
Load — 写入 staging / warehouse / mart
| 阶段 | 常见坑 |
|---|---|
| Extract | 源库压力大、漏增量水位 |
| Transform | 时区、NULL、重复键 |
| Load | 非幂等重跑导致重复行 |
幂等是批处理第一原则:同一 DAG 跑两次,结果应与跑一次一致(MERGE / DELETE+INSERT 分区)。
批处理模式
| 模式 | 适用 | 示例 |
|---|---|---|
| 全量刷新 | 小维表 | 每日覆盖 dim_track |
| 增量追加 | 大事实表 | WHERE updated_at >= yesterday |
| 快照 | 历史对比 | 每日用户余额快照 |
| 拉链表 | 缓慢变化 | 课程价格历史(见 de-modeling) |
Extract 实现方式
# 伪代码:JDBC 增量拉取
watermark = get_last_run("tracks_etl")
df = pd.read_sql(
"SELECT * FROM cf_track WHERE updated_at > %s",
conn, params=[watermark]
)
load_to_staging(df, "stg_tracks")
set_last_run("tracks_etl", max(df.updated_at))
生产环境常用 Airflow Operator 或 Fivetran/Airbyte 托管;本站练习可 Python + cron,编排见下一课。
Transform 放在哪
| 策略 | 优点 | 工具 |
|---|---|---|
| ETL(管道内 Python/Spark) | 源端减压 | pandas, Spark |
| ELT(数仓内 SQL) | 利用数仓算力 | dbt, 原生 SQL |
CodeRoadMap 规模下 ELT + dbt 足够;海量日志再考虑 Spark。
与路线图的关系
- /roadmaps/data-engineer — ETL / Batch 节点
- de-orchestration — 调度 Airflow