什么是ETL

news/2025/3/22 17:37:20/

概述

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.ppmy.cn/news/1581182.html

相关文章

【Leetcode 每日一题】2680. 最大或值

问题背景 给你一个下标从 0 0 0 开始长度为 n n n 的整数数组 n u m s nums nums 和一个整数 k k k。每一次操作中,你可以选择一个数并将它乘 2 2 2。 你最多可以进行 k k k 次操作,请你返回 n u m s [ 0 ] ∣ n u m s [ 1 ] ∣ . . . ∣ n u m …

Prometheus Exporter系列-Postgres_Exporter一键部署

这是postgresql exporter的一件安装&#xff0c;经测试可以稳定运行&#xff0c;重新运行会删除旧exporter相关信息创建新的 #!/bin/bash# PostgreSQL Exporter 一键安装脚本&#xff08;最终版&#xff09; # 使用方法: ./pg_exporter_setup.sh <导出端口>set -e# 版本…

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…

天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践

导读&#xff1a;天翼云基于 Apache Doris 成功落地项目已超 20 个&#xff0c;整体集群规模超 50 套&#xff0c;部署节点超 3000 个&#xff0c;存储容量超 15PB。天翼云基于 Apache Doris 和 Apache Iceberg 构建的湖仓一体方案&#xff0c;兼具灵活性、高性能和低成本优势&…

PageHelper插件依赖引入不报错,但用不了

情况: 父模块pom. Xml 引入1. 4. 0以上版本的pagehelper-spring-boot-starter。 要用到插件的子模块&#xff0c;去掉版本号&#xff0c;引入和父模块一样的依赖。 引入成功&#xff0c;没有报错&#xff0c;但是打开右边的maven里面没有找到PageHelper插件。 终端清空并重…

【C++指南】内存管理完全手册:new/delete

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C内存管理的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享…

【回归算法解析系列09】梯度提升回归树(GBRT, XGBoost, LightGBM)

【回归算法解析系列】梯度提升回归树&#xff08;GBRT, XGBoost, LightGBM&#xff09; 1. 梯度提升回归树&#xff1a;迭代优化的艺术 梯度提升回归树&#xff08;Gradient Boosting Regression Tree, GBRT&#xff09;作为集成学习领域中基于Boosting思想的强大算法&#x…

Android Compose 框架矢量图标深入剖析(七)

Android Compose 框架矢量图标深入剖析 一、引言 在移动应用开发中&#xff0c;图标是界面设计的重要组成部分&#xff0c;它能够直观地传达信息&#xff0c;提升用户体验。而矢量图标因其可无损缩放、占用空间小等优点&#xff0c;在 Android 开发中得到了广泛应用。Android…