数仓建模—数仓初识

数仓建模—数据仓库初识

数据仓库之父Bill Inmon在1991年出版的"Building the Data Warehouse"一书中所提出的定义被广泛接受

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)

这是一个偏向学术的定义,却非常准确的界定了数据仓库与其他数据库系统的本质区别,我们也可以认为数据仓库是一种分析数据库,用于存储和处理数据,以便对数据进行分析。

数据仓库的本质就是从面向业务过程的数据组织管理方式向面向分析的数据组织管理方式的转变,面向业务过程的组织管理方式最常见的就是各种各样的业务系统,例如ERP、CRM 等

数据仓库的两个主要功能:存储分析数据和处理分析数据,当然你也可以认为是一种那就是数据管理能力。其实我们大致从数据的流行上看出来就是 收集分析数据、存储分析数据、处理分析数据、使用分析数据

image-20201205182509649

数据仓库是一种体系结构,而不是某一种技术,因为为了满足业务需求我们需要使用多种技术框架,当我们把这些技术框架组合起来,有点类似搭积木,从而让这些技术框架一起运作,就像我们常说的Hive 也只是数仓的一种工具而已,可以是它,也可以是其他技术,技术一直在变化,而一种设计思想或者是架构设计是很长一段时间都不会变化的,例如数仓的分层设计,变化的只是层的划分界限或者是层的名称什么的,但是分层的思想是一直没有变化的

数据仓库最为核心的内容主要有两部分

  1. 第一部分建模
  2. 第二部分查询

建模是我们组织管理数据的方式查询是数仓对外提供服务的能力,所以你可以看到建模是一种思想,查询服务是一种具体的实现,所以建模是底层思想、底层建筑、查询是对外提供服务,所以它一直在变化,数仓的查询能力是我们实现建模思想的手段也是我们对外提供服务的手段。

这里的查询在一定程度上来说是对外提供数据能力的实现,同时也是数据的使用方式,这就需要我们知道用户的使用方式是什么,也就是怎么使用的,从而我们的模型就要满足使用的要求和特点。

需要注意的是,数据仓库只是我们做数据服务的一个环节,最终的目的是做数据服务,用于支持管理决策,所以在我们的整个数据平台上,我们还提供了数据服务功能,也就是对外的数据接口和adhoc

数据仓库需要提供快速和高性能的查询能力,以支持复杂的分析和报表需求。为了实现这一点,数据仓库采用各种技术和策略,例如索引、分区、数据压缩、并行处理等,来优化查询性能和减少响应时间。

面向分析和面向事务

数据仓库是存数据的和分析数据的,企业的各种数据往里面塞(集成),主要目的是为了有效分析数据,后续会基于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报表,为企业的决策提供支持。

这就决定了它和传统的数据库是不一样的,因为我们对它的诉求是不一样的,例如我们关注它能不能存储各种各样的数据或者有没有这个能力能存储企业的全部数据,能不能对外提供分析决策的能力。

操作型数据库

主要面向应用,用于业务支撑,支持对实际业务的处理,也可以叫业务型数据库。可以理解为通常意义上的数据库(后端开发同学口中的经常提到的就是这种)。

要真正理解数据仓库的概念,需要与数据库的系统的对比来看。

数据库是作为“所有处理的单一数据源”出现和定义的。

数据库的出现有两个驱动因素,第一是70年代以前大量应用程序和主文件的分散存放导致一片混乱和大量冗余数据。第二是直接存取存储设备的出现使得按记录寻址成为可能。基于DBMS的在线事务处理为商业发展开辟全新的视野。

数据库系统的设计目标是事务处理。数据库系统是为记录更新和事务处理而设计,数据的访问的特点是基于主键,大量原子,隔离的小事务,并发和可恢复是关键属性,最大事务吞吐量是关键指标,因此数据库的设计都反映了这些需求。

分析型数据库

主要面向数据分析,侧重决策支持,作为公司的单独数据存储,负责利用历史数据对公司各主题域进行统计分析。

由于分析型数据库中的操作都是查询,因此也就不需要严格满足关系型数据库一些设计规范,这样的情况下再将它归为数据库不太合适,也容易不引起混淆,所以称之为数据仓库。

数据仓库的设计目标是决策支持。历史的,摘要的,聚合的数据比原始的记录重要的多。查询负载主要集中在即席查询和包含连接,聚合等操作的复杂查询。

数据仓库采用特定的数据模型来组织和表示数据,这就是数据建模,常用的数据建模技术包括维度建模和星型/雪花模型。维度建模将数据组织成以事实表(包含业务度量)和维度表(包含描述性属性)为中心的结构,使得数据分析和查询变得更加直观和高效,也就是高效高质量低成本使用数据是建模的目的。

相对于数据库系统来说,查询吞吐量和响应时间比事务处理吞吐量重要的多。数据仓库和数据库系统的区别,一言蔽之:OLAP和OLTP的区别。数据库支持是OLTP,数据仓库支持的是OLAP

对 OLTP 和OLAP 的区别还可以有一个维度,就是及时性需求。OLTP对事务的及时性需求较高,而OLAP 则不然。关于OLTP和OLAP 后面有单独的文章解释。

数据仓库的特点

数据仓库主要用来进行决策分析的,为了满足这个要求,相比起数据库,数据仓库是有它自己的特点的,当然这些特点也构成了我们对数据仓库的定义

数据仓库是面向主题的

与传统的数据库不一样,数据仓库是⾯面向主题的,那什么是主题呢 ?

首先主题是一个较高乘次的概念,是较高层次上对企业信息系统中的数据进行综合归类并进行分析的对象集合。在逻辑意义上,它是对企业中某一个宏观分析领域所涉及的分析对象。(就是⽤户用数据仓库进行决策所关心的重点的⽅方⾯面,⼀个主题通常与多个操作信息型系统有关,⽽操作型数据库的数据组织⾯向事务处理理任务,各个任务之间是相互隔离的)

要很好地理解主题这个概念我们还是要和操作型数据系统进行对比,我们的操作型数据系统更多的是面向应用或者是功能的

  1. 面向应用 例如汽车产品、人寿产品、
  2. 面向功能 例如登陆注册、加入购物车、下单、浏览搜索等

如果我们是按照应用来划分的,那我们如果有多个应用,那我们的用户表、购物车等表就会有多个,站在整个企业的角度来说,这就是数据孤岛。

但是我们的数据仓库里面的主题指的是例如顾客主题、保险主题、消费主题、索赔主题、产品主题,其实我们可以看到这是两个不同方向的划分层次,数仓的主题就是对某个分析领域的概念总结,是一个高屋建瓴式的方向领导,一个数仓可以有一个主题或者多个主题。面向主题的数据组织方式,就是在较高层次上对被分析对象有一个完整、一致的描述,能刻画各个分析对象所涉及到的各项数据及数据之间的关系

数据仓库是集成的

集成的原因就是我们的操作型数据都是面向应用的,也就是非集成的,数据仓库的数据是从原来的分散的数据库数据(mysql等关系型数据库)抽取出来的,然后进行集成,不集成的数据是没有意义的,数据孤岛依然存在,但是抽取到数仓的这一步也就是ODS 环节,只是具备了集成的条件,但是还没有集成。

操作型数据库 与DSS(决策⽀支持系统)分析型数据库差别甚⼤大。

  1. 第⼀,数据仓库的每一个主题所对应的源数据在所有的各个分散的数据库中,有许多重复和不一样的地⽅方,且来源于不不同的联机系统的数据都和不同的 应⽤用逻辑捆绑在⼀起;
  2. 第二,数据仓库中的综合数据不能从原来有的数据库系统直接得到。因此在数据进入数据仓库之前,必然要经过统一处理,这⼀步是数据仓库建设中最关键、最复杂的一步, 所要完成的⼯作有:
    1. 要统计源数据中所有矛盾之处,如字段的同名异议、异名同义、单位不统一,字段长度不统一等。
    2. 进⾏数据的综合和计算。数据仓库中的数据综合工作可以在原有数据库抽取数据时生成,但许多是在数据仓库内部⽣成的,即进入数据仓库以后进行综合⽣成的

数据仓库作为一个中心化的存储系统,用于集成来自多个不同数据源的数据。这些数据源可以包括企业内部的操作型数据库、数据湖、日志文件、外部数据提供商等。通过将这些数据源整合到一个数据仓库中,企业可以消除数据孤岛,并在一个地方对数据进行统一管理和查询。

多数据源抽取/集成

这只是集成的第一步,就是将相关的数据都抽取过来,存放在数仓里,这个技术实现有很多,例如Sqoop、DataX等

数据规范化处理

在将数据加载到数据仓库之前(其实规范化本身就是在数据仓库里操作的),通常需要进行数据清洗和转换操作。这包括数据质量检查、数据规范化、缺失值处理、数据类型转换等。清洗和转换的目的是确保数据的一致性、准确性和完整性,使其适合分析和决策制定。

包括字段的命名、单位、数据格式等需要统一,只有这样集成才是有意义的

例如性别的表示 到底是使用0|1 数字还是 m|f 字母都是不太重要的,重要的是性别这个属性它们在数仓里面的表示是需要统一的。

数据仓库的数据是随着时间的变化而变化的

数据仓库的数据是随着时间的变化而变化的的言外之意是反映历史变化

数据仓库中的数据不可更新是针对应用来说的,也就是说,数据仓库的用户进行分析处理理是不进行数据更更新操作的。但并不是说,在从数据集成输⼊入数据仓库开始到最后被删除的整个生命周期中,所有的数据仓库数据都是永远不变的。

数据仓库的数据是随着时间变化而变化的,这是数据仓库的特征之一。这一特征主要有以下三个表现:

  1. 数据仓库随着时间变化不断增加新的数据内容。数据仓库系统必须不断捕捉OLTP数据库中变化的数据,追加到数据仓库当中去,也就是要不断的⽣成OLTP数据库的快照,经统一集成增加到数据仓库中去;但对于确实不在变化的数据库快照,如果捕捉到新的变化数据,则只生成一个新的数据库快 照增加进去,⽽不会对原有的数据库快照进⾏行行修改。
  2. 数据库随着时间变化不断删去旧的数据内容 。数据仓库内的数据也有存储期限,一旦过了了这一期限, 过期数据就要被删除。只是数据库内的数据时限要远远的⻓于操作型环境中的数据时限。在操作型环 境中⼀般只保存有60到90天的数据,而在数据仓库中则要需要保存较⻓时限的数据(例例如:5~10 年年),以适应DSS进行趋势分析的要求。
  3. 数据仓库中包含有⼤量的综合数据,这些综合数据中很多跟时间有关,如数据经常按照时间段进行综 合,或隔⼀定的时间片进⾏抽样等等。这些数据要随着时间的变化不断地进⾏重新综合。因此数据仓 库的数据特征都包含时间项,以标明数据的历史时期。

其实说白了就是一些列的操作型数据库的快照

数据仓库的数据是不可修改的(相对稳定的)

数据仓库的数据主要提供企业决策分析之⽤,所涉及的数据操作主要是数据查询,⼀般情况下并不进行修改操作。

数据仓库的数据反映的是⼀一段相当长的时间内历史数据的内容,是不同时点的数据库快照的集合, 以及基于这些快照进行统计、综合和重组的导出数据,而不是联机处理理的数据。

数据库中 进行联机处理理的书库进过集成输入到数据仓库中,一旦数据仓库存放的数据已经超过数据仓库的数据 存储期限,这些数据将从当前的数据仓库中删去。

因为数据仓库只进行数据查询操作,所以数据仓库 当中的系统要⽐数据库中的系统要简单的多。数据库管理系统中许多技术难点,如完整性保护、并发 控制等等,在数据仓库的管理理中几乎可以省去。

但是由于数据仓库的查询数据量往很大,所以就对 数据查询提出了更高的要求,要求采用各种复杂的索引技术;同时数据仓库⾯面向的是商业企业的⾼层管理层,他们会对数据查询的界⾯面友好性和数据表示提出更高的要求;

数据仓库是用于支持业务决策

这其实说明了为什么要建设数据仓库,前面是数据仓库的特点,这里是建设数据仓库的目的,也就是用于支持业务决策,其实随着发展,企业的数据越来越完善,已经不仅仅是满足了企业的业务决策。

我们经常听到数据资产,根据企业的特点和数据的沉淀,对于有的企业而言,数据满足可日常的业务探索,业务决策,对于有的企业而言数据就是企业的生产资料。

数据库和数据仓库分离开的原因

其实我们看到数据仓库里的数据一开始就是在数据库里的,那么我们为什么不直接在数据库里完成数据分析和使用呢,为什么要搞个数据仓库呢,也就是有了OLTP 为什么还要去做OLAP 呢 。

  • 分离的主要原因是有助于提高两个系统的性能。操作数据库是为已知的任务和负载设计的,如使用的主键索引,检索特定的记录,优化“定制的”查询。而数据仓库的查询通常是复杂的,涉及大量数据汇总级的计算,可能需要特殊的基于多维视图的数据组织、存取方法和实现方法。在操作数据库上处理 OLAP 查询,可能会大大降低操作任务的性能。
  • 操作数据库支持多事务的并发处理,需要并发控制和恢复机制(例如,加锁和记日志),以确保一致性和事务的鲁棒性。通常,OLAP 查询只需要对汇总和聚集数据记录进行只读访问。如果将并发控制和恢复机制用于这种 OLAP 操作,就会危害并行事务的运行,从而大大降低 OLTP 系统的吞吐量。
  • 数据仓库与操作数据库分离是由于这两种系统中数据的结构、内容和用法都不相同。决策支持需要历史数据,而操作数据库一般不维护历史数据。在这种情况下,操作数据库中的数据尽管很丰富,但对于决策是远非完整的。决策支持需要整合来自异构源的数据(例如,聚集和汇总),产生高质量的、纯净的和集成的数据。操作数据库只维护详细的原始数据(如事务),这些数据在进行分析之前需要整理。由于两种系统提供大不相同的功能,需要不同类型的数据,因此需要维护分离的数据库。

总结

这篇文章中,我们主要介绍了以下知识点

  1. 什么是数仓,其实很多企业做数据仓库的时候,都忽略了数仓与BI、数据库的差异,只去搞底层数据,不去做数据服务和应用,其实就是把数据仓库给狭义化了
  2. 数仓的特点和定义,我们为什么要去做数据仓库
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不二人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值