什么是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 组合)。

相关推荐
weixin_307779131 小时前
Azure云平台数据库迁移方案全解析
服务器·数据仓库·microsoft·azure
半部论语1 小时前
StarRocks vs Doris:深度剖析与选型分析
数据仓库·big data
难以触及的高度3 小时前
Hive配置JDBC连接
数据仓库·hive·hadoop
派可数据BI可视化4 小时前
什么是 BA ?BA怎么样?BA和BI是什么关系?
大数据·数据仓库·信息可视化·数据分析·商业智能bi
StarRocks_labs8 小时前
vivo 湖仓架构的性能提升之旅
数据仓库·架构·数据分析·云计算·湖仓一体
wangzhongyudie8 小时前
Hive的分区分桶和数据抽样
数据仓库·hive·hadoop
weixin_307779139 小时前
稳定运行的以Microsoft Azure Cosmos DB数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
数据仓库·microsoft·性能优化·azure·etl
RestCloud1 天前
数据仓库是什么,跟数据集成有什么关系
数据仓库·etl·数字化转型·数据集成
随缘而动,随遇而安2 天前
第二十九篇 数据仓库与商务智能:技术演进与前沿趋势深度解析
大数据·数据库·数据仓库·数据库开发·数据库架构