分层|最详细!深入浅出理解「3层6类」数据分层( 二 )


数据来源:
1)业务库

  • 经常会使用sqoop来抽取,例如每天定时抽取一次。
  • 实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。
2)埋点日志
  • 日志一般以文件的形式保存,可以选择用flume定时同步。
  • 可以用spark streaming或者Flink来实时接入。
  • kafka。
消息队列:即来自ActiveMQ、Kafka的数据等。
2. 第二层:数据仓库层 DW1)第一类:公共维度汇总层 DIM(Dimension)
主要由维度表(维表)构成。维度是逻辑概念,是衡量和观察业务的角度。维表是根据维度及其属性将数据平台上构建的物理化的表,采用宽表设计的原则。
2)第二类:数据仓库层DW(Data Warehouse)
分层|最详细!深入浅出理解「3层6类」数据分层】这一层是基于ODS和DIM层的数据做轻度汇总。所谓轻度汇总就是按照一定的主题去组合这些数据,例如:作者信息表、用户信息表、稿件信息表。
数据仓库层从上到下,又可以分为3个层:数据细节层DWD、数据中间层DWM、数据服务层DWS。
  1. 数据细节层:data warehouse details,DWD:这层目的在于将ODS层进行和DW层进行隔离。进入DW层之前同样需要把数据进行处理和清洗,例如:除去空数据和脏数据等等。
  2. 数据中间层:Data Warehouse Middle,DWM;该层是在DWD层的数据基础上,对数据做一些轻微的聚合操作,生成一些列的中间结果表,提升公共指标的复用性,减少重复加工的工作。
  3. 数据服务层:Data Warehouse Service,DWS;该层是基于DWM上的基础数据,整合汇总成分析某一个主题域的数据服务层,一般是宽表,用于提供后续的业务查询,OLAP分析,数据分发等。一般来说,该层的数据表会相对较少;一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。
3. 第三类:应用数据服务层 ADSApplication Data Service。该层主要是提供数据产品和数据分析使用的数据,一般会存放在ES、MySQL等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。
ADS层数据是数据仓库的最后一层数据,以DWS层数据为基础进行数据处理。
那常见的分层结构有哪些呢?如何去应用这些分层呢?
四、常见的数据分层应用这3大类5层的数据层,是层层递进,并非每一层都是必不可少的,想要建设一套较为标准的数仓,现在市面上都是如何进行构建呢?
1. 三级数仓分层我们先来看下简单的三级分层,三级分层氛围ODS、DWD、DWM层这三层。每一层的目的和作用如下:
1)第一层:ODS层
用于存放从业务系统直接抽取出来的数据,这些数据从数据结构、数据之间的逻辑关系上都与业务系统基本保持一致,因此在抽取过程中极大降低了数据转化的复杂性,而主要关注数据抽取的接口、数据量大小、抽取方式等方面的问题。
下面是两个例子,分别适用于传统行业和互联网行业:
  • 传统行业ODS层:各业务系统对接来的数据。拿交易源数据来说(每次订单的记录,一个订单有多个记录)。例如:交易源数据、用户源数据、货物源数据
  • 互联网行业ODS层:除业务系统外,还会对接日志采集系统。拿app日志埋点来说,本层会记录用户每次登陆、app内的行为数据,一个用户会有多条记录)。例如:APP日志数据、小程序日志数据、用户登录数据等等
2)第二层:DWD层
主要存档从ODS层汇总上来的数据,以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细事实表。可将某些重要属性字段做适当冗余,也即宽表化处理。从ODS层汇总上来的数据。最大限度保证与ODS层数据一致。
下面是两个例子,分别适用于传统行业和互联网行业:
  • 传统行业DWD层:拿订单数据来说,本层会记录订单粒度的支付情况,一个订单仅有一条记录。例如:订单交易表、用户表、活动表、货物表。
  • 互联网行业DWD层:拿用户登录表来说,本层记录用户在。
3)第三层:DWM层
是对DWD层的生产数据进行轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV日志生成的会话数据)。轻度综合层与DWD的主要区别在于二者的应用领域不同,DWD的数据来源于生产型系统,并未满意一些不可预见的需求而进行沉淀;轻度综合层则面向分析型应用进行细粒度的统计和沉淀。例如:按照天粒度去汇总某一主题的数据情况。