ETL vs ELT
问题
ETL 和 ELT 有什么区别?各自适用什么场景?
答案
ETL 流程
- Extract(抽取):从源系统拉取数据
- Transform(转换):在中间层清洗、标准化、聚合
- Load(加载):写入目标数据仓库
ELT 流程
- Extract(抽取):从源系统拉取数据
- Load(加载):先原样写入数据仓库
- Transform(转换):在数仓内用 SQL 做转换
对比
| 对比 | ETL | ELT |
|---|---|---|
| 转换位置 | 中间件(ETL 工具) | 数仓内(SQL) |
| 代表工具 | Informatica、Kettle、Talend | dbt、Spark SQL |
| 适用 | 传统数仓、数据量不大 | 云数仓、大数据量 |
| 灵活性 | 转换逻辑写在工具中 | SQL 编写,版本控制 |
| 扩展性 | 受限于 ETL 工具性能 | 借助数仓算力扩展 |
| 趋势 | 逐渐被替代 | 主流趋势 |
现代数据栈的选择
- 如果用 Snowflake/BigQuery/Databricks 等云数仓 → ELT + dbt
- 如果用传统 Hadoop/Hive → ETL(Spark)或 ELT(Hive SQL)
- ELT 的核心优势:利用云数仓的弹性算力,不受 ETL 工具瓶颈
常见 ETL/ELT 工具
| 类型 | 工具 | 特点 |
|---|---|---|
| 数据采集 | Airbyte、Fivetran、Canal | 从源拉数据到仓库 |
| 数据转换 | dbt、Spark SQL | 在仓库内转换 |
| 调度编排 | Airflow、Dagster | 管理任务依赖和执行 |
| 全链路 | Informatica、DataX | 传统 ETL 全套 |
常见面试问题
Q1: 你们的 ETL 流程是什么样的?
答案(回答框架):
- 说明数据从哪来:业务 MySQL(Canal 同步)、日志(Flume/Filebeat)
- 说明落到哪:Hive ODS 层
- 说明怎么转换:Spark SQL / dbt 在数仓内做 DWD → DWS → ADS
- 说明调度方式:Airflow T+1 调度
Q2: ETL 失败了怎么处理?
答案:
- 告警通知:Airflow 任务失败自动通知(邮件/钉钉)
- 定位问题:看日志(数据源异常?网络超时?SQL 错误?)
- 修复后重跑:Airflow 支持从失败节点重跑
- 幂等设计:确保重跑不会产生重复数据