数据分层的目的在于让数据有序的流转,在数据的整个生命周期中更清晰的被感知到(血缘追踪?目前还不是太理解)。
关于数据分层,重点应该是在于功能、数据流,而不是形式,例如一定要分几层,一定要叫什么名字。
从功能上,要专注于每一层的功能,每一层的功能都应该是独立的,上一层的工作应当会顺理成章的为下一层的工作的前置。
在数据流上来看,数据在数仓中的流动应当是单向的,从上游到下游,在单层中的数据,也应当是单向的,既数据间的依赖关系可以理解为一个有向无环图,如下图
应当尽量避免如虚线所示的B+E=>F,更应当杜绝出现橙色实线的样式。
单向的功能和数据流可以显而易见的有助于进行数据追溯。
数据分层所用的到技术即数仓的选型要从数仓与数据库的区别来看:
1.数据库的多是OLTP型的数据库,如Mysql、Oracle等,一般用来服务业务系统,重点在于吞吐量、响应速度。
2.数仓,在选型上不一定就是hadoop生态的,使用Oracle、Mysql等也是可以用来做数仓,数仓的重点在于历史数据的存储、分析。
此处对数仓和数据库的区别不做过多的分析,等自己理解更深了再来写。不过虽然数仓在选型上不一定是hadoop生态,但是数据库基本上不会用hive。
ods层:
功能上来看,第一层是起到作用是数据汇集,数据流上来看,这一层是所有数据的入口。同时,这一层也可以将数据仓库和源端进行隔离。
数据汇集的概念很好理解,将多个业务库的数据汇集到一起,源端可能是Oracle、mysql这种结构化数据库,也可能是mongodb等半结构化的数据库,可能是交易数据、埋点也有可能是各种日志,可能是自建的数据库,也可能是在云上,在汇集的时候需要对不同的源端做不同处理,例如工具的选用、抽取的方式是全量还是增量都需要经过衡量。
从ODS向后,就是数据仓库了,这就是形式上的隔离。而有的数据仓库因为权限的问题,需要在源端与数仓之间加一个中间层,也可以看作是一种隔离。隔离还有着管理、技术、运维等方面的意义,待以后想清楚了再写。
DW层:
DW一般又分为DWD、DWS和DWM层。
DWD层:该层的主要功能是对ODS层的数据的补充,例如增加注释,将维度表退化到事实表中,这样做的好处是数据在进行使用的过程中减少了表之间的关联。
DWS(DWM):从功能上来说因为DWS和DWM层的功能很类似,例如指标的计算的中间表,按照业务划分形成客户、产品等不同的主题域,本质上都是对上一层的数据进行聚合,所以二者之间的区别并不明显。一般来讲,该层的表的数量会比之前少,但是表的字段会增加,具体如下图所示:
APP层:
本层的数据对外提供应用,如果是提供业务使用,放在关系型数据库会比较好,也有可能是用来做数据分析、挖掘,例如报表的产出等,这种情况下还是在hive中比较合适。这一层的难点在于如何提供符合要求的数据。
以上的分层往往都是针对业务数据而言,但是对数据仓库还有一类不得不提的数据:维度表。这类数据的作用在DWD层会对事实表做退化,做完维度退化以后,这类数据的功能性便会大大降低,但是一个数据仓库不应该只是存储了一堆数据,还应该有相应的规范,例如流程、运维等,这类数据是否需要一个单独的分层来作为一个输出的规范呢。。。。我目前感觉是有那么点必要性的。