数仓理论目录
一、什么是数据仓库
数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
1.1 数仓的特点
概括来看,数仓有以下四个特征:
a.数据面向主题
与传统数据库面向应用进行数据组织的特点相对应,数据仓库中的数据是面向主题
进行组织的。
什么是主题呢?泛指数据的主要内容,在逻辑意义上,可以对应某一宏观的分析领域。数据仓库是主观创建并且面向分析的,它可能随着人的变化而变化,也会随着时间而变化,对应数据的主题也随之会发生变化。
b.数据是集成的
数据仓库的数据是从原有的分散的多个数据库、数据文件和数据段中抽取来的,数据来源可能既有内部数据又有外部数据。 由于来源于不同联机系统的数据都和不同的逻辑绑定在一起,而数据仓库中的数据绝大多数不能从原有的数据库中直接得到,因此,在数据进入数仓前,必须对数据进行统一和综合,这一步是数据仓库建设中最关键
、最复杂
的一步,所要完成的工作有:
- 统一数据的不一致之处,例如长度不一致,单位不一致…
- 对数据综合和计算。数据综合可以是在数据抽取时完成,但更多的是在数据仓库内部生成的;
c.数据非易失的
数仓中数据主要供企业做决策分析,涉及的数据操作主要是数据查询
,所以一般情况下不进行修改操作。数据仓库的数据反映的是一段相当长的时间内历史数据的内容,是不同时点的数据库快照的集合,以及基于这些快照进行统计、综合和重组的导出数据,而不是联机处理的数据。数据仓库的目的就是要根据曾经发生的事件进行分析,如果数据是可修改的,将使历史分析变得没有意义;
d.数据是随时间变化的
- 数仓随时间变化不断添加新的数据内容;
- 数仓随时间推移不断删除旧的数据内容,超过数据时限的就要被删除;数仓中数据 需要保存较长时限的数据(如十年左右);数据仓库中的数据必须以一定时间段为单位进行统一更新;
- 数仓中的很多综合数据都和时间挂钩,随着时间变化数据也需要不断重新进行综合;因此数据仓库的数据特征都包含时间项,以标明数据的历史时期;
二、数仓和数据库的区别
当我们去探究数据仓库和数据库的区别与联系时,我们先要了解的联机事务处理OLTP
(On-Line Transaction Processing)和联机分析处理OLAP
(On-Line Analytical Processing)之间的区别和联系。
传统的关系型数据库的主要应用是OLTP,主要是基本的、日常的事务处理
;数据仓库系统的主要应用主要是OLAP,支持复杂的分析操作,侧重决策支持
,并且提供直观易懂的查询结果。
OLTP | OLAP | |
---|---|---|
应用场景 | 面向事务(行级操作) | 面向分析(范围操作) |
是否更新 | 可更新的 | 只读,只追加 |
设计模型 | 实体-关系(ER)模型 | 星型、星座模型或雪花模型 |
数据规模 | GB | TB/PB |
数据存储 | 存储瞬时数据 | 存储历史数据 |
数据表征 | 最新数据状态 | 随时间变化的历史状态 |
除了以上的区别之外,还有以下根本的区别:
- 数据库是一种具体
数据存储技术
,而数据仓库是一种结构体系
;在搭建数仓的过程中,我们会用到数据库这种技术支持; - 数据库是用来小数据量的读写操作,而后者是用来处理大数据的分析计算工作;传统的关系型数据库中根据业务来设计数据机构,不是为了查询和分析便利而设计的;
三、数仓的数据来源
- RDMS;eg:MySQL,ORACLE,SQL-SERVER…
- 日志数据
- 服务器日志,Tomcat日志等;
- 用户行为数据,通过前端设置埋点实现日志采集;
- 第三方提供的数据;
- 其他渠道数据;
四、数仓的分层
4.1 数仓分层的意义
数仓分层的目的是:逐层解耦,减少重复计算,降低烟囱式开发。越到底层,越接近业务发生的记录,越到上层,越接近业务目标。具体如下:
清晰数据结构
:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解,实现业务数据解耦;减少重复开发
:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算;统一数据口径
:通过数据分层,提供统一的数据出口,统一对外输出的数据口径复杂问题简单化
:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
4.2 ODS(Operational Data Store)
存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。
ODS层的作用:
- 保持数据原貌不做任何修改,起到备份数据的作用;
- 数据采用压缩存储,减少磁盘存储空间(如:原始数据100G,可以压缩到10G左右);
- 创建分区表,防止后续的全表扫描
4.2 DWD(data warehouse detail)
DWD层是以业务过程为驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。
具体操作如下:
- 数据清洗:去除空值、过滤核心字段无意义的数据、超过极限范围的数据;
- 维度退化:对业务数据传过来的表进行维度退化和降维
- 数据压缩:采用适合的压缩格式对数据进行压缩处理;
- 数据存储:行式存储转列式存储;
4.3 DWS(data warehouse service)
- DWS层会在DWD层的数据基础上,对数据做横向的连接,纵向轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。统计各个主题对象的当天行为,DWS层的宽表字段,是站在不同维度的视角去看事实表,重点关注事实表的度量值,通过与之关联的事实表,获得不同的事实表的度量值。
- 构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。
4.4 DM(data market)
数据集市层,这层数据是面向主题来组织数据的,通常是星形或雪花结构的数据。以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表DM层主题宽表都记录什么字段?每个维度关联的不同事实表度量值以及首次、末次时间、累积至今的度量值、累积某个时间段的度量值。
4.4.1 ADS(application data store)
为应用数据层,针对大主题指标分别进行分析,根据业务具体需求,做对应的统计分析指标。这层数据是完全为了满足具体的分析需求而构建的数据,也是星形或雪花结构的数据。从数据粒度来说是高度汇总的数据。从数据的广度来说,则并不一定会覆盖所有业务数据,而是DM层数据的一个真子集,从某种意义上来说是DM层数据的一个重复。
五、数仓建模
数据模型建设的意义:
- 进行全面的业务梳理,改进业务流程;
- 建立全方位的数据视角,消灭信息孤岛和数据差异;
- 解决业务的变动和数据仓库的灵活性;
- 帮助数据仓库系统本身的建设;
六、数仓调优
七、数据维护
PS:如果有写错或者写的不好的地方,欢迎各位大佬在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!
原创作者:wsjslient |
参考来源:https://blog.csdn.net/qq_31821675/article/details/107543785 |
https://blog.csdn.net/lightupworld/article/details/108716552 |