作者介绍

@super超

空间计算与城市大数据

塑造未来的科幻迷

持续更新大数据与数据科学系列


数据仓库建设主题是系列篇,目的是带大家从了解数据仓库的基础知识开始,循序渐进,学会数据仓库的建设,本篇是数仓建设的第一篇,主要讲讲数据仓库的基础知识。


01 什么是数据仓库


数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。


02 数据仓库的特点


面向主题性

传统数据库面向应用进行数据组织的特点相对应,数据仓库中的数据是面向主题进行组织的。面向主题的数据组织方式,就是在较高层次上对分析对象的数据的一个完整、一致的描述,能完整、统一地刻划各个分析对象所涉及的企业的各项数据,以及数据之间的联系。


集成性

数据仓库的数据是从原有的分散的数据库数据抽取来的。操作型数据与DSS分析型数据之间差别甚大。数据进入数据仓库之前,必然要经过统一与综合,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:


(1)要统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致,等等。


 (2)进行数据综合和计算。数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。


不可更新性:

数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一般情况下并不进行修改操作。数据仓库的数据反映的是一段相当长的时间内历史数据的内容,是不同时点的数据库快照的集合,以及基于这些快照进行统计、综合和重组的导出数据,而不是联机处理的数据。数据库中进行联机处理的数据经过集成输入到数据仓库中,一旦数据仓库存放的数据已经超过数据仓库的数据存储期限,这些数据将从当前的数据仓库中删去。因为数据仓库只进行数据查询操作,所以数据仓库管理系统相比数据库管理系统而言要简单得多。数据库管理系统中许多技术难点,如完整性保护、并发控制等等,在数据仓库的管理中几乎可以省去。但是由于数据仓库的查询数据量往往很大,所以就对数据查询提出了更高的要求,它要求采用各种复杂的索引技术;同时由于数据仓库面向的是商业企业的高层管理者,他们会对数据查询的界面友好性和数据表示提出更高的要求。


不断变化性:

数据仓库随时间变化不断增加新的数据内容。数据仓库系统必须不断捕捉OLTP数据库中变化的数据,追加到数据仓库中去,也就是要不断地生成OLTP数据库的快照,经统一集成后增加到数据仓库中去;但对于确实不再变化的数据库快照,如果捕捉到新的变化数据,则只生成一个新的数据库快照增加进去,而不会对原有的数据库快照进行修改。


数据仓库随时间变化不断删去旧的数据内容。数据仓库的数据也有存储期限,一旦超过了这一期限,过期数据就要被删除。只是数据仓库内的数据时限要远远长于操作型环境中的数据时限。在操作型环境中一般只保存有60-90天的数据,而在数据仓库中则需要保存较长时限的数据(如5~10年),以适应DSS进行趋势分析的要求。


数据仓库中包含有大量的综合数据,这些综合数据中很多跟时间有关,如数据经常按照时间段进行综合,或隔一定的时间片进行抽样等等。这些数据要随着时间的变化不断地进行重新综合。因此,数据仓库的数据特征都包含时间项,以标明数据的历史时期。


03 数据仓库发展史


数据仓库的发展大致经历了这样的三个过程:


简单报表阶段

这个阶段,系统的主要目标是解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所需要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。


数据集市阶段

这个阶段,主要是根据某个业务部门的需要,进行一定的数据的采集,整理,按照业务人员的需要,进行多维报表的展现,能够提供对特定业务指导的数据,并且能够提供特定的领导决策数据。


数据仓库阶段

这个阶段,主要是按照一定的数据模型,对整个企业的数据进行采集,整理,并且能够按照各个业务部门的需要,提供跨部门的,完全一致的业务报表数据,能够通过数据仓库生成对对业务具有指导性的数据,同时,为领导决策提供全面的数据支持。

通过数据仓库建设的发展阶段能够看出,数据仓库的建设和数据集市的建设的重要区别就在于数据模型的支持。


04 数据仓库架构分层


数据仓库的分层设计是一种逻辑上的划分,目的是为了方便管理。不同的公司有不同的划分方法,通常一般设计为3+1层。


ODS层

数据运营层是最接近数据源中数据的一层,数据源中的数据经过抽取、转换、传输之后装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。

一般来讲,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。


DW层

数据公共层,是数仓建设的重点,一般是日志子表和一些宽表,主要完成数据的清洗、转换等。一般又可以分为DWD层、DWM层、DWS层。

数据明细层DWD(Data WareHouse Detail):该层一般保持和ODS层一样的数据粒度,并且提供给一定的数据质量保证。

数据中间层DWM(Data WareHouse Middle):该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。

数据服务层DWS(Data WareHouse Service):该层又称为数据集市,按照主题划分,如流量、订单、用户等主题表,用于提供后续的业务查询、OLAP分析、数据分发等。一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。


在实际计算中,如果直接从DWD层或者ODS层计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS层的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS层亦可。


APP层

数据应用层,主要是提供给数据产品和数据分析、数据挖掘使用的数据。比如我们经常说的报表数据,一般就放在这里。


维表层

维表是”3+1”的"1"。主要包含以下两部分数据。

高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。

低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。




05 数据仓库表命名规范


俗话说无规矩不成方圆。我们在搭建数据平台的时候,需要先制定好各种规范,越早越好,并且不断的监督大家是否按照约定执行。一旦大家自由发挥,想要再次统一或者重构就非常的困难,会浪费很大的人力成本和时间成本,因此在这里总结一下数据仓库的表命名规范。一般来说表名需要见名知意,通过表名就可以知道它是哪个业务域,干嘛用的,什么粒度的数据。特殊用途的表有一些特殊的命名法则。


1、常规表

常规表是我们需要固化的表,是正式使用的表,是需要去维护去完善的表。

规范:分层前缀[ods|dwd|dws|ads]-业务域-主题域-XXX-粒度

业务域、主题域我们都可以用词根的方式枚举清楚,不断完善,粒度也是同样的,主要的是时间粒度、日、月、年、周等,使用词根定义好简称。


2、临时表

临时表是不需要固化的表,是临时使用一次的表,就是暂时保存下数据看看,后续一般不再使用,是可以随时删除的表。

规范:tmp-XXX

只要加上tmp开头即可,其他名字随意,注意tmp开头的表不要用来实际使用,只是测试验证而已。


3、维表

维表是稳定不变或者变化非常缓慢的表,例如销售渠道维表、商品维表等,可以从数据中自动生成也可以手工来维护。

规范:dim-XXX

维表,统一以dim开头,后面加上,对该指标的描述,可以自由发挥。


4、手工表

手工表是手工维护的表,手工初始化一次之后,一般不会自动改变,后面变更也是手工来维护。一般来说,手工的数据粒度是偏细的,所以,暂时统一放在dwd层,后面如果有目标值或者其他类型手工数据,再根据实际情况分层。

规范:dwd-业务域-manual-XXX

名称中的manual表示这是手工维护表。



今天的内容就到这儿啦,平安夜祝你们都能收到又大又红又好吃的平安果。(我一大早刚到公司门口,迎面就走来一个超级美的小姐姐,微笑着递给我一个平安果,正当我害羞的低下头想说谢谢时,她微笑着走向了我后面的小哥哥。。。)


数据人交流和学习的社区,关注我们,掌握专业数据知识、结识更多的数据小伙伴。

带你探索数据的神奇奥秘

点赞(2661) 打赏

评论列表 共有 1 条评论

cheriexue 2年前 回复TA

数据中台写的不错

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部