什么是ETL

概述

ETL(Extract-Transform-Load)是一种数据集成过程,常用于数据仓库、数据分析、数据清洗等场景。ETL的主要目标是从不同数据源提取数据,进行清洗、转换,然后加载到目标数据仓库或分析系统。

ETL所描述的过程,一般常见的作法包含ETL或是ELT,并且混合使用。通常越大量的数据、复杂的转换逻辑、目的端为较强运算能力的数据库,越偏向ELT,以便运用目的端数据库的平行处理能力。

ETL 常用的三种实现方法

  1. 借助ETL工具(如Oracle的OWB、SQL Server 2000的DTS、SQL Server 2005的SSIS服务、Informatic等)实现

  2. SQL实现

  3. ETL工具和SQL结合。

    借助工具可以快速的建立起ETL工程,屏蔽了复杂的编码任务,提高了速度,降低了难度,但是缺少灵活性。SQL方法灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。

注:

数据仓库(Data Warehouse)是一种面向分析和决策支持的数据库系统

Extract

主要针对各个业务系统不同服务器的分散数据,充分理解数据定义后,规划需要的数据源及数据定义,制定可操作的数据源,制定增量抽取和缓慢渐变的规则。

提取是把多种多样的原格式数据抽象出来,形成统一的数据格式先放入缓存区,不会直接进入数据仓库,等待下一步转换操作。

数据的抽取是从各个不同的数据源抽取到ODS(Operational Data Store,操作型数据存储)中

调研

首先,要搞清楚数据是从几个业务系统中来,各个业务系统的数据库服务器运行什么DBMS,是否存在手工数据,手工数据量是多大,是否存在非结构化数据等,当收集完这些信息之后才可以进行数据抽取的设计。

分类

与存放DW的数据库系统相同的数据源

一般情况下,DBMS(SQL Server、Oracle)都会提供数据库链接功能,在DW数据库服务器和原业务系统之间建立直接的链接关系就可以写Select语句直接访问。

与DW数据库系统不同的数据源

一般情况下,可以通过ODBC的方式建立数据库链接------如SQL Server和Oracle之间。如果不能建立数据库链接,可以有两种方式完成,一种是通过工具将源数据导出成.txt或.xls文件,然后再将这些源系统文件导入到ODS中,另外一种方法是通过程序接口完成。

增量抽取
  1. 基于时间戳

    适用:数据库记录更新频繁,如 EMR 电子病历数据

  2. 基于主键自增

    适用:数据库主键递增的数据表,如患者挂号数据

  3. 基于数据日志

    监听数据库日志捕获变更数据

    适用:高并发数据抽取,如 Kafka 实时流处理

全量抽取

每次抽取所有数据,无需考虑数据是否已更新

Extract 的工具

不同场景可以选择不同的 ETL 工具进行数据抽取:

工具 特点 适用场景
Python + Pandas 适用于小规模数据抽取 处理 CSV, Excel, JSON, API 数据
Airflow 定时调度批量 ETL 任务 BI 报表数据抽取
Talend 可视化 ETL 工具 数据仓库构建
Flink / Spark Streaming 实时数据流处理 Kafka, 实时数据库日志 CDC
Logstash 适用于日志数据抽取 服务器日志,ELK 生态
DBT(Data Build Tool) 适用于 SQL 数据变换 数据仓库 ETL

ODBC(Open Database Connectivity)开放数据库连接,是一种数据库访问接口,用于让不同的软件能够访问不同类型的数据库,而不需要针对每种数据库写特定的代码。

Transform

Transform负责对数据进行清洗、格式转换、聚合、标准化等操作,以便数据能够正确加载到数据仓库或数据湖,并适用于分析或机器学习任务

操作

类别 说明 示例
数据清洗(Cleaning) 处理空值、去重、修正错误数据 去掉 NULL 值、填充缺失数据
数据标准化(Standardization) 统一不同来源的数据格式 YYYY/MM/DDYYYY-MM-DD
数据类型转换(Type Conversion) 统一数据类型,避免计算错误 "123" (字符串) → 123 (整数)
数据去重(Deduplication) 删除重复数据,保持唯一性 同一个订单号重复出现,去重
数据拆分 & 合并(Splitting & Merging) 拆分列、合并列,调整数据结构 full_namefirst_name + last_name
数据派生(Derivation) 计算新字段 total_price = quantity * unit_price
数据映射(Mapping) 用标准值替换非标准值 MMale, FFemale
数据聚合(Aggregation) 按维度分组统计 customer_id 统计 total_orders
数据编码(Encoding) 数据脱敏、哈希处理 手机号加密 138****5678

Load

加载方式

全量加载(Full Load)

🔸 概念 :每次都清空目标表,然后重新加载所有数据。
🔸 适用场景 :数据量小,或者数据每次都需要完整更新的情况。
🔸 缺点:如果数据量大,性能开销高,且会影响系统可用性。

适用场景

  • 初次数据迁移
  • 业务数据不涉及实时更新
  • 目标系统数据库不支持增量更新
增量加载(Incremental Load)

🔸 概念 :只加载自上次更新以来的新增或变更数据,常使用时间戳或主键进行增量判断。
🔸 适用场景 :数据量大,且需要高效更新的情况。
🔸 优势:减少数据重复加载,提高效率。

批量加载(Batch Load)

🔸 方式 :数据按一定大小分批插入,而不是一次性全部加载。
🔸 适用场景:大数据量 ETL,避免占用过多数据库资源。

流式加载(Streaming Load)

🔸 方式 :数据实时或准实时插入目标数据库,常用于大数据流处理。
🔸 适用场景 :数据需要实时更新,如日志分析、IoT 数据。

🔹 工具:Kafka + Flink、Airflow、DataFlow

覆盖加载(Overwrite Load)

🔸 方式:用新数据替换目标表中的旧数据(不会删除数据,而是更新)。

合并加载(Upsert Load)

🔸 方式 :如果数据已存在则更新,否则插入新数据(INSERT + UPDATE 组合)。

相关推荐
mysql学习中1 天前
hive数仓要点总结
数据仓库·hive·hadoop
chat2tomorrow2 天前
SQL2API是什么?SQL2API与BI为何对数据仓库至关重要?
数据库·数据仓库·低代码·bi·数据中台·sql2api
派可数据BI可视化3 天前
数据中台、BI业务访谈(二):组织架构梳理的坑
数据仓库·人工智能·信息可视化·数据分析·商业智能bi
酷爱码3 天前
Centos7下安装hive详细步骤
数据仓库·hive·hadoop
高冷小伙3 天前
大数据开发之数据仓库
大数据·数据仓库
chat2tomorrow3 天前
如何在数据仓库中集成数据共享服务?
数据仓库·mysql·低代码·数据分析·sql2api
随缘而动,随遇而安4 天前
第四十六篇 人力资源管理数据仓库架构设计与高阶实践
大数据·数据库·数据仓库·sql·数据库架构
程序员老周6664 天前
数据仓库标准库模型架构相关概念浅讲
大数据·数据仓库·hive·数仓·拉链抽取·增量抽取·数据仓库架构
SeaTunnel5 天前
【同步教程】基于Apache SeaTunnel从MySQL同步到MySQL——Demo方舟计划
大数据·人工智能·apache·etl
RestCloud5 天前
2025常用的ETL 产品推荐:助力企业激活数据价值
数据仓库·apache·etl·kettle·数据集成·ibm·informatica