跳到主要内容

ETL vs ELT

问题

ETL 和 ELT 有什么区别?各自适用什么场景?

答案

ETL 流程

  1. Extract(抽取):从源系统拉取数据
  2. Transform(转换):在中间层清洗、标准化、聚合
  3. Load(加载):写入目标数据仓库

ELT 流程

  1. Extract(抽取):从源系统拉取数据
  2. Load(加载):先原样写入数据仓库
  3. Transform(转换):在数仓内用 SQL 做转换

对比

对比ETLELT
转换位置中间件(ETL 工具)数仓内(SQL)
代表工具Informatica、Kettle、Talenddbt、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 流程是什么样的?

答案(回答框架):

  1. 说明数据从哪来:业务 MySQL(Canal 同步)、日志(Flume/Filebeat)
  2. 说明落到哪:Hive ODS 层
  3. 说明怎么转换:Spark SQL / dbt 在数仓内做 DWD → DWS → ADS
  4. 说明调度方式:Airflow T+1 调度

Q2: ETL 失败了怎么处理?

答案

  1. 告警通知:Airflow 任务失败自动通知(邮件/钉钉)
  2. 定位问题:看日志(数据源异常?网络超时?SQL 错误?)
  3. 修复后重跑:Airflow 支持从失败节点重跑
  4. 幂等设计:确保重跑不会产生重复数据

相关链接