一、ETL概述与数据仓库基础

各位同学,咱们今天聊聊ETL和数据仓库。说实话,这两个词在数据领域就像「米饭」和「筷子」——天天见,但真要说清楚,很多人反而含糊了。

我刚开始做数据的时候,也踩过不少坑。有一次,业务方要一份日报,我直接从源库拉数据,跑了个SQL就交差了。结果第二天,数据对不上,业务方直接找上门来。后来我才明白——没有ETL规范,没有分层架构,数据就是一团乱麻。

1.1 ETL到底是什么?

ETL,全称是Extract-Transform-Load,翻译过来就是「抽取-转换-加载」。说白了,就是把数据从A点搬到B点,路上还得洗洗干净、整理整齐。

  • 抽取(Extract):从源系统拿数据。可能是MySQL、Oracle,也可能是日志文件、API接口。
  • 转换(Transform):清洗、过滤、合并、计算。这是最耗时的环节,我见过有的项目,80%的ETL代码都在做转换。
  • 加载(Load):把处理好的数据写入目标库,比如数据仓库、数据集市。

核心要点:ETL不是简单的「复制粘贴」。它要解决数据质量问题、格式不一致问题、业务逻辑映射问题。你想想看,源系统里「性别」字段存的是0和1,目标系统要的是「男」和「女」,这不就得靠ETL来转吗?

1.2 数据仓库分层架构

数据仓库为什么要分层?我个人的理解是——为了「解耦」。就像盖楼,你不能把地基、墙体、装修全混在一起。数据也一样,分层之后,每一层各司其职,出了问题也好排查。

常见的分层有4层:ODS、DWD、DWS、ADS。咱们一个一个说。

ODS层(操作数据存储层)

ODS是数据仓库的「入口」。它存放的是从源系统抽取过来的原始数据,几乎不做任何加工。说白了,就是「原样照搬」。

  • 数据粒度:和源系统保持一致
  • 存储周期:通常是近1-3个月
  • 典型操作:增量抽取、全量抽取

我的经验:ODS层的数据一定要保留原始时间戳。我曾经遇到过一次数据回溯问题,就是因为ODS层没有记录抽取时间,导致后来查不到数据变更历史。嗯,这个坑我替你们踩过了。

DWD层(明细数据层)

DWD层是「清洗后的明细数据」。这里会做数据标准化、字段映射、脏数据过滤。比如,把「2019-01-01」统一成「2019-01-01 00:00:00」,把空值处理成默认值。

-- DWD层常见操作示例
-- 清洗前:create_time 字段格式混乱
-- 清洗后:统一为 yyyy-MM-dd HH:mm:ss

SELECT 
    user_id,
    COALESCE(gender, '未知') AS gender,  -- 空值处理
    TO_TIMESTAMP(create_time, 'yyyy-MM-dd HH:mm:ss') AS create_time  -- 格式统一
FROM ods_user_info
WHERE is_deleted = 0;  -- 过滤逻辑删除数据

DWS层(汇总数据层)

DWS层是「轻度汇总层」。按天、按小时、按维度做聚合。比如,统计每天的活跃用户数、每个品类的销售额。

为什么要有DWS层?你想想看,如果每次报表都要从DWD层几亿条数据里算汇总,那性能得多差?DWS层就是「预计算」,把常用的指标提前算好。

维度 DWD层数据量 DWS层数据量 查询速度对比
用户行为 10亿条/天 100万条/天 快100倍以上
订单明细 5000万条/天 50万条/天 快100倍以上

ADS层(应用数据层)

ADS层是「面向业务的数据层」。它直接服务于报表、大屏、数据产品。数据量最小,但业务价值最高。

注意:ADS层的数据一定要和业务方确认口径。我见过最惨的案例——技术团队按「下单时间」统计销售额,业务方按「支付时间」统计,结果两边数据差了20%,开会吵了一下午。所以,口径对齐比代码本身更重要。

1.3 OLTP与OLAP的区别

这两个概念,我刚开始也搞混过。后来一个老大哥跟我说了句话,我记到现在——「OLTP是干活用的,OLAP是看报表用的」。

咱们用表格对比一下:

对比维度 OLTP(联机事务处理) OLAP(联机分析处理)
典型场景 下单、支付、登录 月报、趋势分析、用户画像
数据特点 频繁写入、少量读取 大量读取、很少写入
数据量级 GB级别 TB甚至PB级别
响应时间 毫秒级 秒级到分钟级
典型技术 MySQL、PostgreSQL、Oracle Hive、ClickHouse、Doris

为什么会这样?因为OLTP要保证事务的ACID特性,每次操作都得「稳准狠」。而OLAP追求的是「快」——快速扫描大量数据,快速返回聚合结果。

我记得有一次,业务方想在MySQL上跑一个全量用户行为分析,结果跑了半小时还没出结果,直接把线上数据库拖慢了。后来我们把分析任务迁移到ClickHouse上,同样的数据,3秒出结果。这就是选错工具的代价。

1.4 小结

这一章咱们聊了三个核心概念:

  • ETL:数据搬运工,但得搬得干净、搬得规范
  • 数据仓库分层:ODS→DWD→DWS→ADS,每一层都有它的使命
  • OLTP vs OLAP:干活用OLTP,分析用OLAP,别混着用

下一章,咱们会深入ETL的具体开发流程,包括数据抽取策略、增量与全量的选择。到时候我会分享一些我在实际项目中用过的「骚操作」,保证实用。

好了,今天就到这儿。有问题随时交流。