一,数据仓库的基本概念
数据仓库(Data Warehouse,DW或DWH)是一个面向分析的为企业提供决策支持的集成化数据环境。数据仓库分为离线数仓和实时数仓,离线数仓以Hive为代表,实时数仓以storm,spark streaming,flink代表。
1,创建数据仓库的目的
创建数据仓库的目的是分析报告和提供决策支持。数据仓库本身既不生产数据,也不消费数据,数据来源于外部并且开放给外部应用。
2,数据仓库的作用
数据仓库的作用是解决数据孤岛问题,将数据集中的存储起来进行分析。
3,什么是数据孤岛
企业中的业务数据一般会存储在多个不同的业务数据库中,如果要对这些分散业务数据进行数据分析十分不方便,效率太低。这一现象称为数据孤岛。
4,什么是数据集市
数据集市(Data Mart)通常是数据仓库的子集,主要面向部门级的业务,面向某个特定的主题。而数据仓库通常面向企业级的业务。
5,什么是数据湖
数据湖(Data Lake)是一个存储企业原始数据的**大型仓库,**其中的数据可供提取,处理,分析,和传输。数据湖中的数据以原始格式存储,包括结构化数据,半结构化数据,非结构化数据。数据仓库只对结构化数据进行分析。
6,数据仓库的数据来源
数据仓库的数据来源有1,业务数据(业务数据库中的数据),2,日志数据,3,爬虫数据,4,其他数据。
7,常见数据格式
常见数据格式有csv,json,xml,其中csv格式文件是结构化文件,JSON和xml是半结构化文件。
1,CSV
.csv使用固定的分隔符将数据分隔成多个列的一种文件格式分隔符可以是任意字符,一般情况下会常用:英文的逗号 分号 制表符 空格 。CSV的标头(Header)可缺省。CSV是HDFS中常见的结构化文件存储格式。
举例:
id name gender
1 张三 男
2 李四 女
3 王五 男
2,JSON
.json格式和Python中的字典以及Java中Map类似,都是键值对(Key-Value)型的数据结构,key一般是字符串,Value可以是任意类型,包括键值对。Python中字典可以和JSON格式进行无缝切换。JSON格式的文件属于半结构化文件
3,XML
.xml和.json格式一样都是键值对型的数据结构,也是半结构化的数据,XML可以和JSON无缝切换。XML格式常用在配置文件中,如Hive的核心配置文件hive-site.xml。
如下是XML和JSON的切换
<!-- xml -->
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend! </body>
</note>
<!-- json -->
{
"note": [
"to": "Tove",
"from": "Jani",
"heading": "Reminder",
"body": "Don't forget me this weekend!"
]
}
8,结构化,半结构化 ,非结构化数据类型
开发中最常见是结构化数据和半结构化数据,很少情况遇到非结构化数据。
1,结构化
结构化数据是可以用Schema描述的数据,可以简单认为结构化数据就是可以转化为二维表的数据类型。常见的结构化数据有CSV,Excel等。
2,半结构化
半结构化数据是可以用Schema描述其部分内容的数据,常见的半结构化数据有JSON,XML。当json,xml文件的值是统一的,且没有嵌套的情况,JSON,xml可以完全转化为二维表格。
3,非结构化
无法用Schema描述的数据,称为非结构化数据,常见的markdown文本,Word文档,map3,AVI、mp4都属于非结构化数据。
二,数据仓库的主要特征
数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策 。
1,面向主题性(Subject-Oriented)
主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。一个分析的主题可以对应多个数据源。在数仓中开展分析,首先确定分析的主题,然后基于主题寻找、采集跟主题相关的数据。
2,集成性(Integrated)
数仓不是生成数据的平台其数据来自于各个不同的数据源
当我们确定主题之后就需要把和主题相关的数据从各个数据源集成过来。
因为同一个主题的数据可能来自不同的数据源它们之间会存在着差异(异构数据):字段同名不同意、字段同意不同名,单位不统一、编码不统一; 因此在集成的过程中需要进行ETL(Extract抽取Transform转换 load加载)。
3,非易失性(Non-Volatitle)
非易失性就是不可更新性,数据仓库中一般有大量的查询操作,但修改和删除操作很少。因此,数据经加工和集成进入数据仓库后是极少更新的,通常只需要定期的加载和更新。
4,时变性(Time-Variant)
数据仓库的目的是通过分析企业过去一段时间业务的经营状况,挖掘其中隐藏的模式。数据仓库的数据需要更新,以适应决策的需要。
从这个角度讲,数据仓库建设是一个项目,更是一个过程。数据仓库的数据随时间的变化表现在以下几个方面。
(1)数据仓库的数据时限一般要远远长于操作型数据的数据时限。
(2)操作型系统存储的是当前数据,而数据仓库中的数据是历史数据。
(3)数据仓库中的数据是按照时间顺序追加的,它们都带有时间属性。
数仓是一个持续维护建设的东西。
站在时间的角度,数仓的数据成批次变化更新。一天一分析(T+1) 一周一分析(T+7)
上述所讲的更多偏向于离线数仓,当下还有比较火的实时数仓。
三,数据仓库和数据库的区别
数据库和数据仓库的区别实际上讲的是OLTP与OLAP的区别。
1,OLTP
操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing,),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
2,OLAP
分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。
特别注意:数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。
四,数据仓库分层架构
根据数据的流入流出的过程,数据仓库的基础核心架构分为三层 ,ODS(源数据层),DW(数据仓库层),DA(数据应用层)。
1,ODS层
ODS(Operational Data Store),操作层数据层,源数据层,临时存储层。此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
2,DW层
DW(Data Warehouse),也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。其数据来自于ODS经过层层的ETL变成各种模型的数据,数据干净规则统一。
企业中根据业务复杂度 继续在DW中继续划分子层。 存储大量的中间结果。其数据来自于ODS经过层层ETL得出 企业中可以根据需求在DW中继续分层。
3,DA层
DA(Data Application),数据应用层。前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。数据应用有报表展示(Report),即席查询(Ad-hoc),数据分析(Data Analysis),数据挖掘(Data Mining)。
即席查询指的是根据需求进行查询。
4,数据仓库分层的好处
1, 清晰数据结构
2, 数据血缘追踪
3 ,减少重复开发
4, 把复杂问题简单化
5, 屏蔽原始数据的异常