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

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


http://www.kler.cn/a/595836.html

相关文章:

  • 算法 | 优化算法比较
  • 自然语言处理|深入解析 PEGASUS:从原理到实践
  • 字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破
  • 6.5840 Lab 3: Raft
  • react 常用插件
  • 暂存合并分支
  • 【机器学习-模型评估】
  • 老旧中控系统智能化改造方案:基于巨控OPC561Q-C模块实现多通道实时报警
  • 【css酷炫效果】纯CSS实现全屏万花筒效果
  • 八股文MYSQL
  • Centos7部署学之思考试系统
  • 新书速览|云原生Kubernetes自动化运维实践
  • 解决 uniapp 开发中权限申请同步告知目的问题| 华为应用商店上架审核问题解决
  • 初始EBP和ESP的设置
  • Android Compose 图像修饰深度解析(八)
  • 使用Python轻松拆分PDF,每页独立成文件
  • (一)丶Windows安装RabbitMQ可能会遇到的问题
  • JavaScript性能优化实战:深入探讨性能瓶颈与优化技巧
  • STM32 SPI总线驱动CH376T实现U盘/TF卡读写全解析—CH376数据手册分析(中上) | 零基础入门STM32第七十三步
  • Event driven agentic document workflows 笔记 - 3