一、ETL概念及实现方式
ETL(Extract, Transform, Load)是数据集成的核心过程,用于从不同的数据源中提取数据,对其进行清洗和转换,最后加载到目标数据库或数据仓库中。ETL广泛应用于数据仓库、数据湖、数据分析等领域,为分析、报表、机器学习等应用提供一致、清洗后的数据。
数据孤岛:
- 企业中的业务数据,通常会分散存储到非常多的业务数据库中。
- 如果要对这些数据,进行数据分析,因为数据零散存储,就会造成统一分析的困难。
数据仓库:
- 为了解决数据孤岛问题,我们需要将数据,集中的存储起来,方便集中进行分析。
- 这种集中数据进行分析的方案,我们一般称之为:数据仓库。
1.1.ETL 概念
将企业中分散的数据,集中的输入到数据仓库中的过程,就是 ETL。
- Extract(提取): 从多个异构数据源(如数据库、文件系统、API等)中提取原始数据。数据源可以是关系型数据库(如MySQL、PostgreSQL)、非关系型数据库(如MongoDB、Cassandra)、文件(如CSV、JSON)、API或流式数据源。
- Transform(转换): 对提取的数据进行清洗、标准化、聚合、去重等操作,以满足业务需求或数据分析的要求。这一步可能涉及数据类型转换、格式转换、业务规则应用、数据聚合、数据质量校验等。
- Load(加载): 将转换后的数据加载到目标存储系统中,通常是数据仓库或数据湖中,供后续的数据分析、报表或机器学习等用途。加载的方式可以是全量加载、增量加载或实时加载。
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 格式
文本格式,本质存储的是一个二维表格数据,每一行的列之间使用指定的分割符进行分割。
分隔符可以是任意字符,一般情况下会常用:逗号、分号、制表符、空格 等符号
注意:
- 上面csv文件中,最上面的一行代表每列的列名,这一行叫标头(header)
- csv文件中标头不是必须的,可有可无
2.2.JSON 数据格式
文本格式,本质是Key-Value型的数据结构,key一般是字符串,表示key的名字,value是任意类型,可以是字符串、数字、list、字典。
注意:json数据中的引号必须是双引号,且不能有多余的逗号!!!
2.3.XML 数据格式
文本格式,本质是Key-Value型的数据结构,一般大数据软件的配置文件多采用 xml
三、结构化、半结构化、非结构化数据
3.1.结构化数据
概念:可以用schema描述的数据,就是结构化的数据。
- Schema:数据的描述,比如有几个列,每个列是什么含义,可以简单的认为Schema就是类似数据库的表结构。
- 可以简单理解为,能够转换成 二维表格 的数据,就是结构化的数据
常见结构化数据:
①.数据库中的表
- 可以用Schema描述,也就是被表结构所描述
②.CSV
- 同样可以被Schema描述,有表结构(有几个列,每个列是什么)
③.Excel
- 就是一个二维表格、就是结构化数据
Schema(模式):
- 定义:Schema是一种用于描述数据结构的定义。它通常指定了数据的列数、列名、数据类型以及每个列所表达的含义。Schema相当于“元数据”的概念,即描述数据本身的信息。
- Schema描述结构化数据:结构化数据的关键是具有清晰的Schema。通过Schema的定义,结构化数据可以按照规定的格式进行存储、操作和查询。比如,在数据库中,Schema为数据提供了一致性、数据完整性和检索能力。
3.2.半结构化数据
概念:部分内容可以用Schema描述的数据,叫做半结构化数据。
- 简单的说,半结构化数据部分内容可以转换成二维表格,但是不一定能完全转换成二维表格
常见半结构化数据:
- JSON
- XML
3.3.非结构化数据
概念:完全无法用Schema描述的数据,叫做非结构化数据。
- 简单的说,完全无法用二维表格表示的数据,就是非结构化数据
常见非结构化数据:
- word文档
- 图片
- mp3
- avi、mp4等