当前位置: 首页 > news >正文

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

相关文章:

  • Mac上Github加速方案
  • MySQL-视图
  • 子数组 之 logTrick算法,求解或,与,LCM,GCD
  • 详细讲解c++中线程类thread的实现,stl源码讲解之thread
  • HarmonyOs-ArkUI List组件
  • 【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究
  • 【NUUO 摄像头】(弱口令登录漏洞)
  • 苏宁开放平台关键字搜索接口接入教程‌
  • 第三天 函数定义与参数传递 - 模块与包管理
  • 红宝书第十四讲:详解JavaScript集合类型:Map、Set、WeakMap
  • mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁
  • Linux-数据结构-哈夫曼树-哈希表-内核链表
  • SQL 视图
  • linux,防火墙,firewall,常用命令
  • FastAPI系列02:FastAPI程序结构与生命周期
  • Web Workers优化 Web 网站的性能
  • Unity2D 五子棋 + Photon联网双人对战
  • Postman 如何发送 JSON 格式的 API 请求?
  • 2025-03-24 学习记录--C/C++-PTA 习题7-4 求矩阵各行元素之和
  • 关于Qt的各类问题
  • 2025上海浪琴环球马术冠军赛开赛在即,首批赛马今晨抵沪
  • 京东美团开打,苦了商家?
  • 第152次中老缅泰湄公河联合巡逻执法行动圆满结束
  • 万能险新规落地:保险期限不得低于五年,明确万能险销售“负面清单”
  • 上海发布一组人事任免信息:钱晓、翁轶丛任市数据局副局长
  • 2025全国知识产权宣传周:用AI生成的图片要小心什么?