ETL:抽取(Extract)、转换(Transform)、加载(Load)
在关系型数据模型的早期时代,数据通常是结构化的(structured)。
当数据从不同来源被提取出来后,通常会先被转换为所需的格式,再加载到目标位置(如数据库或数据仓库)。
这个过程就叫做:
ETL:Extract(抽取)、Transform(转换)、Load(加载)
即使在机器学习出现之前,ETL 在数据领域就已经非常流行了;
而今天,它在机器学习应用中仍然极为重要。
ETL 是指一种通用的数据处理方式,把原始数据加工成你想要的形状与格式。
1️⃣ 抽取(Extract)
从数据源中提取你所需要的数据。
数据可能来自多个来源,格式不统一;
有些数据可能是损坏的或格式不正确的;
在抽取阶段,你需要:
对数据进行校验(validate);
对不合格的数据进行剔除(reject);
甚至可能需要通知数据来源方修复这些问题。
因为这是整个流程的第一步,所以如果这一步做好了,可以为后续节省大量时间和精力。
2️⃣ 转换(Transform)
这是整个流程中最核心的步骤,大部分的数据处理工作都在这一步完成。
可能会包括以下操作:
从多个来源的表中 连接(join) 数据;
清洗(clean) 数据;
统一字段格式/取值(例如:有的数据源用 "Male"/"Female",有的用 "M"/"F",还有的用 "1"/"2");
进行操作:转置、去重、排序、聚合、特征派生、新一轮校验等等。
3️⃣ 加载(Load)
决定如何、以及多频率地将处理后的数据加载到目标位置:
可以加载到文件、
或 数据库、
或 数据仓库(data warehouse)。
📌 虽然 ETL 的概念很简单,但它却是许多公司数据系统的核心架构基础。
书中图 2-9 展示了 ETL 流程的整体概况。
从 ETL 到 ELT:数据爆炸时代的转变
当互联网普及、硬件性能飞跃之后,数据采集变得容易,而数据量也随之极速增长。
不仅数据量变多了,数据的形态也发生了变化:
数据来源增加;
数据结构(schema)不断演化。
为了解决 schema 频繁变动的问题,有公司提出了一个新思路:
“我们干脆先把所有数据丢进一个**数据湖(data lake)**吧,
等用的时候再去读取原始数据加工。”
这种思路叫做:
ELT:Extract(抽取)→ Load(加载)→ Transform(转换)
ELT 的优势在于:
数据到达很快;
无需提前加工,就能先存储下来。
📉 但 ELT 并不完美
随着数据不断增长,ELT 也暴露出问题:
在庞大的原始数据中搜索目标数据会变得效率极低;
而随着公司转向 云端运行应用,基础设施标准化,数据结构也逐渐趋于稳定;
将数据写入预定义 schema 变得更加可行。
🏗️ 新趋势:数据湖 + 数据仓库 = Data Lakehouse
企业在权衡:
存储结构化数据(高性能) vs
存储非结构化数据(高灵活性)
于是,出现了一种融合架构:
Lakehouse(湖仓一体)解决方案
比如:
✅ Databricks
✅ Snowflake
这类平台提供的功能既有 数据湖的灵活性,又具备 数据仓库的结构化管理能力。
如需我为你:
对比 ETL 与 ELT 在实际工程中的优劣;
展示 Spark 或 Airflow 构建的 ETL 流程示例;
推荐 Lakehouse 架构下的 ML 数据管道设计;