一、数据仓库定义
简单理解:数据仓库就是整合多个数据源的历史数据进行细粒度的、多维的分析,帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。
官方定义:数据仓库是一个面向主题的(主题明确)、集成的(从不同的数据源采集到同一个数据源)、随时间变化的(关键数据是可变的可更新的)、但信息本身相对稳定(一般只进行查询的操作)的数据集合,用于对管理决策过程的支持。
二、数据仓库应用
差异项 | 数据库 | 数据仓库 |
---|---|---|
特征 | 操作处理 | 信息处理 |
面向 | 事务 | 分析 |
用户 | DBA、开发 | 经理、主管、分析人员 |
功能 | 日常操作 | 长期信息需求、决策支持 |
DB设计 | 基于ER模型,面向应用 | 星形/雪花模型,面向主题 |
数据 | 当前的、最新的 | 历史的、跨时间维护 |
汇总 | 原始的、高度详细 | 汇总的、统一的 |
视图 | 详细、一般关系 | 汇总的、多维的 |
工作单元 | 短的、简单事务 | 复杂查询 |
访问 | 读/写 | 大多为读 |
关注 | 数据进入 | 信息输出 |
操作 | 主键索引操作 | 大量的磁盘扫描 |
用户数 | 数百到数亿 | 数百 |
DB规模 | GB到TB | >= TB |
优先 | 高性能、高可用性 | 高灵活性 |
度量 | 事务吞吐量 | 查询吞吐量、响应时间 |
三、数据仓库架构
(一)简单架构
数据采集
数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些ETL操作。
数据源种类可以有多种:
- 日志:所占份额最大,存储在备份服务器上
- 业务数据库:如Mysql、Oracle
- 来自HTTP/FTP的数据:合作伙伴提供的接口
- 其他数据源:如Excel等需要手工录入的数据
数据存储与分析
HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。
离线数据分析与计算,也就是对实时性要求不高的部分,Hive是不错的选择。
使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算。
Spark性能比MapReduce好很多,同时使用SparkSQL操作Hive。
数据共享
前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据。
这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库。
数据应用
报表:报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层。
接口:接口的数据都是直接查询数据共享层即可得到。
即席查询:即席查询通常是现有的报表和数据共享层的数据并不能满足需求,需要从数据存储层直接查询。一般都是通过直接操作SQL得到。
即席查询:(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。即席查询与普通应用查询最大的不同是普通的应用查询是定制开发的,而即席查询是由用户自定义查询条件的。
通常的方式是,将数据仓库中的维度表和事实表映射到语义层,用户可以通过语义层选择表,建立表间的关联,最终生成SQL语句。
(二)主流架构
数据采集:采用Flume收集日志,采用Sqoop将RDBMS以及NoSQL中的数据同步到HDFS上
消息系统:可以加入Kafka防止数据丢失
实时计算:实时计算使用Spark Streaming消费Kafka中收集的日志数据,实时计算结果大多保存在Redis中
机器学习:使用了Spark MLlib提供的机器学习算法
多维分析OLAP:使用Kylin作为OLAP引擎
数据可视化:提供可视化前端页面,方便运营等非开发人员直接查询
四、什么是ETL
ETL是数据抽取(Extract)、转换(Transform)、加载(Load )的简写:
它是将OLTP系统中的数据经过抽取,并将不同数据源的数据进行转换、整合,得出一致性的数据,然后加载到数据仓库中。简而言之ETL是完成从OLTP系统到OLAP系统的过程。
1 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
1 联机分析处理(OLAP,On-line Analytical Processing),数据量大,DML少。使用数据仓库模板
2 联机事务处理(OLTP,On-line Transaction Processing),数据量少,DML频繁,并行事务处理多,但是一般都很短。使用一般用途或事务处理模板。
3 决策支持系统(DDS,Decision support system),典型的操作是全表扫描,长查询,长事务,但是一般事务的个数很少,往往是一个事务独占系统。
五、ETL数据仓库架构
数据仓库(Data Warehouse\DW)是基于OLTP(联机事务处理过程)系统的数据源,为了便于多维分析和多角度展现将其数据按特定的模式进行存储而建立的关系型数据库。
它不同于多维数据库,数据库中的数据是细节的,集成的,数据仓库是面向主题的,是以OLAP(联机分析处理)系统为分析目的。
它包括星型架构与雪花型架构,其中星型架构中间为事实表,四周为维度表,类似星星;雪花型架构中间为事实表,两边的维度表可以再有其关联子表,
而在星型中只允许一张表作为维度表与事实表关联,雪花型一维度可以有多张表,而星型不可以。考虑到效率时,星型聚合快,效率高,不过雪花型结构明确,便于与OLTP系统交互。
六、数据仓库多维数据设计
6.1一些概念
主题(Subject)
主题就是指我们所要分析的具体方面。例如:某年某月某地区某机型某款App的安装情况。主题有两个元素:一是各个分析角度(维度),如时间位置;
二是要分析的具体量度,该量度一般通过数值体现,如App安装量。
维(Dimension)
维是用于从不同角度描述事物特征的,一般维都会有多层(Level:级别),每个Level都会包含一些共有的或特有的属性(Attribute),可以用下图来展示下维的结构和组成:
以时间维为例,时间维一般会包含年、季、月、日这几个Level,每个Level一般都会有ID、NAME、
DESCRIPTION这几个公共属性,这几个公共属性不仅适用于时间维,也同样表现在其它各种不同类型的维。
分层(Hierarchy)
OLAP需要基于有层级的自上而下的钻取,或者自下而上地聚合。所以我们一般会在维的基础上再次进行分层,维、分层、层级的关系如下图:
每一级之间可能是附属关系(如市属于省、省属于国家),也可能是顺序关系(如天周年)
量度
量度就是我们要分析的具体的技术指标,诸如年销售额之类。它们一般为数值型数据。我们或者将该数据汇总,或者将该数据取次数、独立次数或取最大最小值等,这样的数据称为量度。
粒度
数据的细分层度,例如按天分按小时分。
事实表和维表
事实表是用来记录分析的内容的全量信息的,包含了每个事件的具体要素,以及具体发生的事情。事实表中存储数字型ID以及度量信息。
维表则是对事实表中事件的要素的描述信息,就是你观察该事务的角度,是从哪个角度去观察这个内容的。
事实表和维表通过ID相关联,如图所示:
星型:
雪花型:
雪花形就是在维度下面又细分出维度,这样切分是为了使表结构更加规范化。雪花模式可以减少冗余,
但是减少的那点空间和事实表的容量相比实在是微不足道,而且多个表联结操作会降低性能,所以一般不用雪花模式设计数据仓库。
事实星座模式就是星形模式的集合,包含星形模式,也就包含多个事实表。
企业级数据仓库/数据集市
企业级数据仓库:突出大而全,不论是细致数据和聚合数据它全都有,设计时使用事实星座模式
数据集市:可以看做是企业级数据仓库的一个子集,它是针对某一方面的数据设计的数据仓库,例如为公司的支付业务设计一个单独的数据集市。
由于数据集市没有进行企业级的设计和规划,所以长期来看,它本身的集成将会极其复杂。其数据来源有两种,一种是直接从原生数据源得到,
另一种是从企业数据仓库得到,设计时使用星形模型
七、数据仓库设计步骤
1、确定主题
主题与业务密切相关,所以设计数仓之前应当充分了解业务有哪些方面的需求,据此确定主题
2、确定量度
在确定了主题以后,我们将考虑要分析的技术指标,诸如年销售额之类。量度是要统计的指标,必须事先选
择恰当,基于不同的量度将直接产生不同的决策结果。
3、确定数据粒度
考虑到量度的聚合程度不同,我们将采用“最小粒度原则”,即将量度的粒度设置到最小。例如如果知道某些数据细分到天就好了,那么设置其粒度到天;
但是如果不确定的话,就将粒度设置为最小,即毫秒级别的。
4、确定维度
设计各个维度的主键、层次、层级,尽量减少冗余。
5、创建事实表
事实表中将存在维度代理键和各量度,而不应该存在描述性信息,即符合“瘦高原则”,即要求事实表数据条数尽量多(粒度最小),而描述性信息尽量少。
参考自:https://www.cnblogs.com/wzlbigdata/p/9458123.html
https://blog.csdn.net/qq_36632174/article/details/102756395