一、ETL概念及实现方式

ETL(Extract, Transform, Load)是数据集成的核心过程,用于从不同的数据源中提取数据,对其进行清洗和转换,最后加载到目标数据库或数据仓库中。ETL广泛应用于数据仓库、数据湖、数据分析等领域,为分析、报表、机器学习等应用提供一致、清洗后的数据。

数据孤岛:

  • 企业中的业务数据,通常会分散存储到非常多的业务数据库中。
  • 如果要对这些数据,进行数据分析,因为数据零散存储,就会造成统一分析的困难。

数据仓库:

  • 为了解决数据孤岛问题,我们需要将数据,集中的存储起来,方便集中进行分析。
  • 这种集中数据进行分析的方案,我们一般称之为:数据仓库。

ETL基础知识_数据

1.1.ETL 概念

将企业中分散的数据,集中的输入到数据仓库中的过程,就是 ETL。

  • Extract(提取): 从多个异构数据源(如数据库、文件系统、API等)中提取原始数据。数据源可以是关系型数据库(如MySQL、PostgreSQL)、非关系型数据库(如MongoDB、Cassandra)、文件(如CSV、JSON)、API或流式数据源。
  • Transform(转换): 对提取的数据进行清洗、标准化、聚合、去重等操作,以满足业务需求或数据分析的要求。这一步可能涉及数据类型转换、格式转换、业务规则应用、数据聚合、数据质量校验等。
  • Load(加载): 将转换后的数据加载到目标存储系统中,通常是数据仓库或数据湖中,供后续的数据分析、报表或机器学习等用途。加载的方式可以是全量加载、增量加载或实时加载。

ETL基础知识_数据

1.2.ETL的实现方式

ETL的实现方式多种多样,可以通过编写自定义代码实现,也可以利用现有的ETL工具完成。使用工具去完成ETL的相关任务,如:Kettle、sqoop、flume、datax

  • 优势:简单、易用,配置方便,无需写代码,鼠标拖拖拽拽就能完成。
  • 劣势:不够灵活,特定的任务需求难以实现。

使用编程语言去自行开发ETL系统,比如Python、Java等

  • 优势:非常自由,想怎么处理就怎么处理。
  • 劣势:开发时间长。

1.3.ETL过程中的常见技术和挑战

1.数据抽取的挑战:

  • 多样的数据源格式:ETL需要处理不同格式的数据,如关系型数据库、NoSQL、文件等。需要处理多种接口、协议等。
  • 数据量大:对于大规模数据集,增量抽取和分区技术可以有效减少数据加载时间。

2.数据转换的挑战:

  • 数据清洗:原始数据可能包含脏数据,如缺失值、重复值等,需要进行数据清洗和修正。
  • 数据转换规则复杂:转换可能涉及复杂的业务规则和跨表操作,确保数据一致性是一个难点。

3.数据加载的挑战:

  • 性能:大规模数据加载时需要考虑性能问题,通常需要使用批量加载技术或流式加载。
  • 数据一致性:需要确保加载后的数据与源数据保持一致,防止数据丢失或加载不完全。

1.4.实际ETL流程的例子

假设一个公司需要将多个系统(如ERP系统、CRM系统等)的数据整合到数据仓库中进行分析,ETL流程可能如下:

①.数据提取:

  • 从ERP系统(MySQL数据库)和CRM系统(API)提取销售数据和客户信息。

②.数据转换:

  • 清洗数据:去除重复客户信息。
  • 关联数据:将销售记录与客户信息关联起来,生成统一的数据表。
  • 聚合数据:按月度汇总销售数据,计算销售额、客户数等指标。

③.数据加载:

  • 将转换后的数据加载到数据仓库(如Amazon Redshift或Google BigQuery)中,供分析师使用。

二、常见的数据格式

在企业中存储数据,除了最常见的关系型表数据,还有一些数据会保存到文件中,常见的文件存储格式如下:

  • CSV 格式
  • JSON 数据格式
  • XML 数据格式

2.1.CSV 格式

文本格式,本质存储的是一个二维表格数据,每一行的列之间使用指定的分割符进行分割。

分隔符可以是任意字符,一般情况下会常用:逗号、分号、制表符、空格 等符号

ETL基础知识_结构化_03

注意:

  • 上面csv文件中,最上面的一行代表每列的列名,这一行叫标头(header)
  • csv文件中标头不是必须的,可有可无

2.2.JSON 数据格式

文本格式,本质是Key-Value型的数据结构,key一般是字符串,表示key的名字,value是任意类型,可以是字符串、数字、list、字典。

ETL基础知识_结构化_04

 注意:json数据中的引号必须是双引号,且不能有多余的逗号!!!

2.3.XML 数据格式

文本格式,本质是Key-Value型的数据结构,一般大数据软件的配置文件多采用 xml

ETL基础知识_加载_05

三、结构化、半结构化、非结构化数据

3.1.结构化数据

概念:可以用schema描述的数据,就是结构化的数据。

  • Schema:数据的描述,比如有几个列,每个列是什么含义,可以简单的认为Schema就是类似数据库的表结构。
  • 可以简单理解为,能够转换成 二维表格 的数据,就是结构化的数据

常见结构化数据:

①.数据库中的表

  • 可以用Schema描述,也就是被表结构所描述

②.CSV

  • 同样可以被Schema描述,有表结构(有几个列,每个列是什么)

③.Excel

  • 就是一个二维表格、就是结构化数据

Schema(模式):

  • 定义:Schema是一种用于描述数据结构的定义。它通常指定了数据的列数、列名、数据类型以及每个列所表达的含义。Schema相当于“元数据”的概念,即描述数据本身的信息。
  • Schema描述结构化数据:结构化数据的关键是具有清晰的Schema。通过Schema的定义,结构化数据可以按照规定的格式进行存储、操作和查询。比如,在数据库中,Schema为数据提供了一致性、数据完整性和检索能力

3.2.半结构化数据

概念:部分内容可以用Schema描述的数据,叫做半结构化数据。

  • 简单的说,半结构化数据部分内容可以转换成二维表格,但是不一定能完全转换成二维表格

常见半结构化数据:

  • JSON
  • XML

ETL基础知识_数据_06

3.3.非结构化数据

概念:完全无法用Schema描述的数据,叫做非结构化数据。

  • 简单的说,完全无法用二维表格表示的数据,就是非结构化数据

常见非结构化数据:

  • word文档
  • 图片
  • mp3
  • avi、mp4等