数据库技术
- 数据仓库
- 数据仓库的定义
- 数据仓库的作用
- 数据仓库的特点(⭐⭐⭐⭐)
- 数据仓库的主要功能(⭐⭐⭐⭐)
- OLTP:联机事务处理(⭐⭐⭐⭐⭐)
- OLAP:联机分析处理(⭐⭐⭐⭐⭐)
- OLAP的基本多维分析操作(⭐⭐⭐⭐⭐)
- 数据仓库与数据库的区别(⭐⭐⭐)
- 数据仓库的三层体系结构(⭐⭐⭐⭐⭐)
- 数据仓库的四层架构(⭐⭐⭐)
- 数据仓库的ETL操作(⭐⭐⭐⭐)
- ETL相关工具
数据仓库
考点导读:这个考点近几年都有考到。内容主要包括数据仓库的概念、功能、特点、与数据库的区别、架构与ETL操作等,属于能力拓展的知识内容,出题的可能性极大,注意理解掌握。
数据仓库的定义
数据仓库(Data Warehouse),是为了企业所有级别的决策制定计划过程,提供所有类型数据类型的战略集合。它出于分析性报告和决策支持的目的而创建。为需要业务智能的企业,指导业务流程改进,时间、成本、质量的控制等。
对于数据仓库的概念我们能够从两个层次予以理:
(1)数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;
(2)数据仓库是对多个异构数据源的有效集成,集成后依照主题进行了重组,并包括历史数据,并且存放在数据仓库中的数据一般不再改动。
数据仓库的作用
把信息加以整理、归纳和重组,并及时提供给对应的管理决策人员是数据仓库的根本任务。
举例:
(1)年度销售目标的制定,需要根据以往的历史报表进行决策,不能随便制定。
(2)优化业务流程
例如:某电商平台某品牌的手机,在过去5年主要的购买人群的年龄在什么年龄段,在哪个季节购买量人多,这样就可以根据这个特点为目标人群设定他们主要的需求和动态分配产生的生产量,和仓库的库存。
数据仓库的特点(⭐⭐⭐⭐)
-
主题导向:数据仓库中的数据是按照业务主题(如销售、库存等)进行组织的,这有助于用户更容易地从业务角度理解和查询数据。
-
集成性:数据仓库整合了来自多个数据源的数据,例如不同部门、系统或业务流程的数据。为了保持数据的一致性,数据仓库在存储之前会进行清洗和转换。
-
时间变化:数据仓库会记录数据随时间的变化,这使得用户可以分析历史趋势和进行时间序列分析。数据仓库通常会保存一定时间范围内的数据,如过去几年的数据。
-
非易失性:数据仓库中的数据一旦存储,就不会轻易地被修改或删除。这有助于确保数据的稳定性和一致性,以支持长期的数据分析和报告。
-
大规模数据:数据仓库通常存储大量数据,这些数据可能来自于多个业务系统或数据源,使得数据仓库具有很高的存储和处理能力。
-
高性能查询:数据仓库通过优化存储结构(如星型模式、雪花模式等)和查询策略(如索引、分区等),提高了对大量数据进行复杂查询和报表生成的性能。
数据仓库的特点使其成为一个适合存储、管理和分析海量数据的系统,满足了企业对数据的长期、稳定和高效的需求。
数据仓库的主要功能(⭐⭐⭐⭐)
数据集成:数据仓库的一个主要功能是集成来自各种不同源的数据。这需要运用到数据集成技术,如ETL(Extract, Transform, Load)过程,用于提取、清洗、转换和加载数据。
数据存储:数据仓库提供大规模的数据存储能力。这需要运用到数据库管理系统(DBMS)和存储技术,如OLAP(On-Line Analytical Processing),用于处理复杂的多维数据查询。
数据查询和分析:数据仓库支持用户对数据进行查询和分析,以帮助用户从数据中提取有价值的信息。这需要运用到数据查询语言(如SQL)和数据分析工具,如BI(Business Intelligence)工具。
数据挖掘:数据仓库还可以运用数据挖掘技术,通过算法模型对数据进行深入分析,以发现数据中的模式和关联。
数据安全和管理:数据仓库需要保证数据的安全性和质量,这需要运用到数据安全技术(如访问控制、数据加密等)和数据管理技术(如数据治理、数据质量管理等)。
数据可视化:数据仓库通过数据可视化技术,将复杂的数据信息以图形化的方式展示出来,帮助用户更好地理解和解释数据。
OLTP:联机事务处理(⭐⭐⭐⭐⭐)
联机事务处理(Online Transaction Processing,简称OLTP, 也称为面向交易的处理系统
)是一种计算机处理模式,主要用于管理日常事务。以下是OLTP的一些关键特性和功能:
-
高并发性:OLTP系统需要支持大量用户同时进行事务处理,例如,一个银行系统需要同时处理来自成千上万个客户的交易请求。
-
实时性:OLTP系统中的数据需要实时更新,以便用户能够看到最新的信息。例如,当客户进行银行转账时,他们的余额应立即更新。
-
原子性:在OLTP系统中,一个事务(例如,银行转账)要么完全执行,要么完全不执行。这确保了数据的一致性。
-
可靠性和恢复能力:如果系统发生故障,OLTP系统需要能够恢复到故障发生前的状态,保证数据的完整性。
-
短交易处理时间:OLTP系统通常需要快速处理事务,以满足用户的需求。例如,一个ATM取款事务需要在几秒钟内完成。
在计算机系统中,关系数据库(如Oracle,SQL Server等)通常被用于实现OLTP,这是因为它们提供了事务处理、并发控制和恢复等必要的功能。而在业务应用中,零售销售、银行交易、航空订票等都是典型的OLTP应用。
OLAP:联机分析处理(⭐⭐⭐⭐⭐)
联机分析处理(Online Analytical Processing,简称OLAP, )是一种计算机处理模式,主要用于分析大量业务数据,以提供决策支持。以下是OLAP的一些关键特性和功能:
-
多维数据模型:OLAP通常使用多维数据模型,如立方体,以便用户能够从多个角度(如时间、地点、产品等)来查看和分析数据。
-
复杂的查询处理:OLAP支持复杂的数据查询,如汇总、钻取、切片和切块等操作,这有助于用户深入地分析数据。
-
大数据量处理:OLAP设计用于处理大量数据。例如,一个零售商可能需要分析数百万条销售记录来了解销售趋势。
-
高性能:由于OLAP需要处理大量数据,因此它通常需要优化数据存储和查询处理技术,以提高查询性能。
-
数据挖掘:OLAP还可以与数据挖掘技术结合,使用算法模型对数据进行深入分析,以发现数据中的模式和关联。
在计算机系统中,OLAP通常使用专门的数据库管理系统(如OLAP服务器)来实现,这是因为它们提供了多维数据模型,以及优化的数据存储和查询处理技术。而在业务应用中,销售分析、财务报告、市场研究等都是典型的OLAP应用。
OLAP的基本多维分析操作(⭐⭐⭐⭐⭐)
OLAP的多维分析操作主要包括以下几种:
-
钻取(Drill-Down):钻取是从一个较高层次(或较粗粒度)的数据向一个较低层次(或较细粒度)的数据进行详细查询的过程。例如,从年度销售额钻取到季度销售额,再钻取到月度销售额。
-
上卷(Roll-Up):上卷是钻取的反向操作,即从一个较低层次(或较细粒度)的数据向一个较高层次(或较粗粒度)的数据进行汇总查询的过程。例如,从月度销售额上卷到季度销售额,再上卷到年度销售额。
-
切片(Slice):切片是在一个多维数据集上选择一个维度并固定其值,从而得到一个减少了一个维度的子集。例如,从一个产品-地区-时间的销售数据立方体中选择时间维度并固定其值为2019年,得到一个产品-地区的销售数据子集。
-
切块(Dice):切块是在一个多维数据集上选择多个维度并固定其值,从而得到一个减少了多个维度的子集。例如,从一个产品-地区-时间的销售数据立方体中选择产品维度并固定其值为手机,选择地区维度并固定其值为北京,得到一个时间的销售数据子集。
-
旋转(Pivot):旋转是改变数据立方体的视图,即改变维度的排列顺序。例如,将一个产品-地区-时间的销售数据立方体旋转为地区-产品-时间的视图。
这些操作可以帮助用户从不同的角度和层次来查看和分析数据,从而更好地理解业务情况和发现业务趋势。
数据仓库与数据库的区别(⭐⭐⭐)
数据库:是一种逻辑概念,用来存放数据的仓库。通过数据库软件来实现。数据库由很多表组成,表是二维的,一张表里可以有很多字段。字段一字排开,对应的数据就一行一行写入表中。数据库的表,在于能够用二维表现多维关系。目前市面上流行的数据库都是二维数据库。比如,Oracle、DB2、MySQL、Sybase、MS SQL Server
等。
数据仓库:是数据库概念的升级。从逻辑上理解,数据库和数据仓库没有区别,都是通过数据库软件实现的存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大得多。数据仓库主要用于数据挖掘和数据分析,辅助领导做决策。数据仓库的表结构是依照分析需求,分析维度,分析指标进行设计的。
数据库比较流行的有:MySQL, Oracle, SqlServer
等;数据仓库比较流行的有:AWS Redshift, Greenplum, Hive
等。
数据库与数据仓库的区别实际讲的是OLTP
与OLAP
的区别。
-
目的:数据库主要用于存储和管理日常业务数据,支持实时的、面向事务的数据处理(如OLTP)。而数据仓库是用于存储大量历史数据,支持复杂的数据分析和决策支持(如OLAP)。
-
数据结构:数据库通常采用关系模型(如表、行和列),并遵循范式化的设计原则,以减少数据冗余和提高数据一致性。而数据仓库通常采用多维模型(如立方体、维度和度量),以便用户能够从多个角度和层次来查看和分析数据。
-
数据处理:数据库主要关注插入、更新和删除操作,以保证数据的实时性和一致性。而数据仓库主要关注查询和汇总操作,以支持复杂的数据分析。
-
性能优化:数据库通常优化事务处理性能,如短交易处理时间和高并发性。而数据仓库通常优化查询处理性能,如快速响应复杂查询和大数据量处理。
-
数据加载和存储:数据库中的数据通常是实时加载的,即业务发生时立即插入或更新。而数据仓库中的数据通常是定期加载的,即通过
ETL
(抽取、转换、加载)过程将数据从多个源系统抽取、清洗、集成到数据仓库。此外,数据仓库通常存储大量历史数据,以便用户能够分析数据的时间趋势。
数据库和数据仓库之间的区别主要体现在它们的目的、数据结构、数据处理、性能优化和数据加载等方面。这两者之间的选择取决于具体的业务需求和数据处理场景。
数据仓库的三层体系结构(⭐⭐⭐⭐⭐)
-
底层:为数据仓库服务器,底层的数据仓库服务几乎总是一个关系数据库系统。包括数据源和数据的存储与管理。
(1)数据源
是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等;
(2)数据的存储与管理
是整个数据仓库系统的核心。数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。 -
中间层:为OLAP服务器,OLAP服务器对分析需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:
ROLAP(关系型在线分析处理)、MOLAP(多维在线分析处理)和HOLAP(混合型线上分析处理)
。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。
中间层OLAP服务器的实现可以是关系模型OLAP(ROLAP),即扩充的关系型DBMS,提供对多维数据的支持;也可以是多维OLAP(MOLAP),它是一种特殊的服务器,直接支持多维数据的存储和操作。 -
顶层:为前端工具,顶层的前端工具主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具和以数据挖掘及各种基于数据仓库或数据集市的应用开发工具。其中数据分析工具主要针对OLAP服务器,报表工具、数据挖掘工具主要针对数据仓库。
数据仓库的四层架构(⭐⭐⭐)
按照数据流入流出的过程,数据仓库架构可分为四层——数据采集、数据存储与分析、数据共享、数据应用。
1.数据采集
数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些ETL(数据抽取、转换和加载)操作。
数据源种类可以有多种:
(1)日志:所占份额最大,存储在备份服务器上;
(2)业务数据库:Mysql、Oracle;
(3)来自HTTP/FTP的数据:合作伙伴提供的接口;
(4)其他数据源:Excel等需要手工录入的数据。
2.数据存储与分析
HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。
离线数据分析与计算,也就是对实时性要求不高的部分,Hive是不错的选择。
使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来作分析与计算。
Spark性能比MapReduce好很多,同时使用SparkSQL操作Hive。
3.数据共享
前面使用Hive、MR、Spark、SparkSQL
分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便地获取数据。这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库。
4.数据应用
(1)报表:报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层。
(2)接口:接口的数据都是直接查询数据共享层即可得到。
(3)即席查询:即席查询通常是现有的报表和数据共享层的数据并不能满足需求,需要从数据存储层直接查询。一般都是通过直接操作SQL得到。
数据仓库的ETL操作(⭐⭐⭐⭐)
ETL是数据仓库中的一个重要过程,它代表了抽取(Extraction)、转换(Transformation)和加载(Load)三个步骤。
-
抽取(Extraction):这个步骤是从各种数据源(如关系数据库、文件系统等)中抽取需要的数据。抽取过程中,需要确定数据源,以及从这些源中获取哪些数据。
-
转换(Transformation):在抽取出数据后,需要进行清洗和转换,以满足数据仓库的要求。转换过程包括数据清洗(解决数据中的错误和不一致性问题)、数据转换(将数据从一种格式转换为另一种格式)、数据集成(整合来自不同源的数据)等操作。
数据清洗操作:
(1)空值处理;根据业务需要,可以将空值替换为特定的值或者直接过滤掉;
(2)验证数据正确性;主要是把不符合业务含义的数据做一处理。比如,把一个表示数量的字段中的字符串替换为0,把一个日期字段的非日期字符串过滤掉等;
(3)规范数据格式;比如,把所有的日期都格式化成yyyy-MM-dd HH:mm:ss的格式等;
(4)数据转码;把一个源数据中用编码表示的字段,通过关联编码表,转换成代表其真实意义的值等;
(5)数据标准,统一。比如,在源数据中表示男女的方式有很多种,在抽取的时候,直接根据模型中定义的值做转化,统一表示男女;
(6)其他业务规则定义的数据清洗. -
加载(Load):最后一步是将清洗和转换后的数据加载到数据仓库中。加载过程中,可能需要根据数据仓库的模型(如星型模型、雪花模型等)来组织数据,以便用户能够方便的进行查询和分析。
ETL过程是数据仓库构建和维护的重要部分,它直接影响到数据仓库的数据质量和查询性能。因此,需要对ETL过程进行充分的设计和优化,以确保数据的准确性、一致性和及时性。
ETL相关工具
ELT相关的工具有很多,这里只列举一些常用的,而且各公司的技术原型也不一样,就需要根据实际情况来选择。
(1)数据抽取工具:kafka、flume、sync。
(2)数据清洗:hive/tez、pig/tez、storm、spark。
(3)其他工具:
数据存储:hadoop、hbase,ES、redis
任务管理:azkaban、oozie
数据同步:datax、sqoop