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

ETL系列-数据加载(Load)

ETL的过程
1、数据抽取:确定数据源,定义数据接口,选择数据抽取方法(主动抽取或由源系统推送)。
2、数据清洗:处理不完整数据、错误数据、重复数据等,确保数据的准确性和一致性。(是数据转换的一部分)
3、数据转换:进行空值处理、数据标准统一、数据拆分、数据验证、数据替换和数据关联等操作。
4、规则检查:根据业务需求进行数据质量和业务规则的校验。
5、数据加载:将数据缓冲区的数据加载到目标数据库或数据仓库中,可能是全量加载或增量加载。

1、ETL系列-数据抽取
2、ETL系列-数据清洗
3、ETL系列-数据转换、检查

5. 数据加载(Load)

ETL 数据加载是 ETL(Extract, Transform, Load)流程的最后一步,负责将经过抽取和转换的数据加载到目标系统(如数据仓库、数据库、数据湖等)

数据加载的主要任务

  1. 选择加载策略

    • 根据业务需求和数据量,选择合适的加载策略(如全量加载、增量加载)。
  2. 数据写入目标系统

    • 将数据写入目标系统的表或文件中。
  3. 数据验证与日志记录

    • 检查加载后的数据是否符合预期(如行数、字段数、数据类型等)。
    • 记录加载过程中的关键信息(如加载时间、数据量、错误信息等)。
  4. 异常处理

    • 处理加载过程中出现的错误(如数据格式不匹配、目标系统不可用)。

数据加载的策略

  1. 全量加载(Full Load)

    • 特点:每次加载时,将所有数据写入目标系统,覆盖原有数据。
    • 适用场景
      • 数据量较小。
      • 目标系统需要完全刷新数据(如首次加载或数据重构)。
    • 优点:简单易实现,保证数据一致性。
    • 缺点:资源消耗大,不适合频繁加载。
  2. 增量加载(Incremental Load)

    • 特点:仅加载新增或修改的数据,不覆盖原有数据。
    • 适用场景
      • 数据量较大。
      • 目标系统需要频繁更新数据。
    • 优点:资源消耗小,适合频繁加载。
    • 缺点:需要识别新增或修改的数据(如通过时间戳、日志或 CDC 技术)。
  3. ** 批量加载(Bulk Load)**

    • 特点:将数据分批加载到目标系统,减少单次加载的资源消耗。
    • 适用场景
      • 数据量较大,无法一次性加载。
      • 目标系统对单次加载的数据量有限制。
    • 优点:减少资源消耗,适合大规模数据加载。
    • 缺点:需要管理分批加载的逻辑。
  4. ** 实时加载(Real-time Load)**

    • 特点:将数据实时加载到目标系统,支持低延迟查询。
    • 适用场景
      • 需要实时分析和查询的场景(如实时监控、实时报表)。
    • 优点:支持低延迟查询。
    • 缺点:实现复杂,对目标系统性能要求高。

数据加载的具体流程

  1. 选择加载策略

    • 根据业务需求和数据量,选择合适的加载策略(如全量加载、增量加载)。
  2. 数据写入目标系统

    • 数据库:使用 SQL 语句(如 INSERT INTO、UPDATE)或数据库工具(如 SQL*Loader、Bulk Insert)。
    • 文件:将数据保存为文件(如 CSV、JSON、Parquet)。
    • 数据湖/数据仓库:使用专用工具(如 AWS Glue、Snowflake)。
  3. 数据验证与日志记录

    • 检查加载后的数据是否符合预期(如行数、字段数、数据类型等)。
    • 记录加载过程中的关键信息(如加载时间、数据量、错误信息等)。
  4. 异常处理

    • 处理加载过程中出现的错误(如数据格式不匹配、目标系统不可用)。
    • 根据错误类型,选择重试、跳过或报警。

数据加载例子

假设我们有一个清洗后的用户数据表 cleaned_users.csv,需要将其加载到 MySQL 数据库中。以下是具体实现:

** 清洗后的数据 (cleaned_users.csv)**

idnameagegenderjoin_date
1Alice25Female2023-01-01
2Bob0Male2023-02-15
3Charlie30Male2023-03-10
4David28Male2023-04-20

目标表结构 (users)

字段名类型说明
idINT用户 ID
nameVARCHAR(50)用户姓名
ageINT用户年龄
genderVARCHAR(10)用户性别
join_dateDATE加入日期

1、使用 Python 实现数据加载

以下是使用 Python 和 pandas + SQLAlchemy 实现数据加载的代码:

import pandas as pd
from sqlalchemy import create_engine

# 读取清洗后的数据
df = pd.read_csv('cleaned_users.csv')

# 数据库连接配置
db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'password',
    'database': 'test_db'
}

# 创建数据库连接
engine = create_engine(f"mysql+pymysql://{db_config['user']}:{db_config['password']}@{db_config['host']}/{db_config['database']}")

# 将数据加载到 MySQL 数据库
try:
    df.to_sql('users', con=engine, if_exists='append', index=False)  # if_exists='append' 表示增量加载
    print("数据加载成功!")
except Exception as e:
    print(f"数据加载失败:{e}")

2、运行结果

数据加载后,MySQL 数据库中的 users 表内容如下:

idnameagegenderjoin_date
1Alice25Female2023-01-01
2Bob0Male2023-02-15
3Charlie30Male2023-03-10
4David28Male2023-04-20

3、总结

数据加载是 ETL 流程的最后一步,负责将清洗和转换后的数据写入目标系统。根据业务需求和数据量,可以选择全量加载、增量加载、批量加载或实时加载等策略。通过 Python 和 pandas + SQLAlchemy,可以高效地完成数据加载任务。

相关文章:

  • MCU-缓存Cache与CPU中的主存SRAM
  • WPF框架---MvvmLight介绍
  • 大模型——模型上下文协议 (MCP)
  • 懒加载预加载
  • pyqt实现yolov8主界面和登录界面以及数据库
  • 轻量级语义分割算法:演进与创新
  • 基于全局拓扑图和双尺度图Transformer的视觉语言导航
  • 深度融合,智领未来丨zAIoT 全面集成 DeepSeek,助力企业迎接数据智能新时代
  • Qt6.8.2创建WebAssmebly项目使用FFmpeg资源
  • 文件操作(详细讲解)(2/2)
  • 使用LSTM对2D pose sequence进行行为分类
  • 计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)
  • html css网页制作成品——非遗文化京剧网页设计(5页)附源码
  • DeepSeek安全:AI网络安全评估与防护策略
  • 大模型 LoRA
  • 对WebSocket做一点简单的理解
  • Halcon:HObject与opencv:Mat互转
  • Linux下安装elasticsearch(Elasticsearch 7.17.23)
  • 出现FullGC的排查思路
  • MATLAB程序介绍,三维环境下的IMM(交互式多模型),使用CV和CT模型,EKF作为滤波
  • 中国建设购物网站/刚刚突发1惊天大事
  • 关于我们做网站/广州网站关键词推广
  • 惠州做网站开发/北京优化互联网公司
  • 国外做鞋子的网站/怎么做关键词优化排名
  • 做调查的网站‘/搜狗收录查询
  • 做网站怎么申请百度推广/自己怎么做网站网页