从ODS层到ADS层,数据是越来越少的,数据分析都是以大量的数据为基础,对数据进行汇总聚合运算,抽丝剥茧,越往后数据的汇总层度越高,最后得到汇总的指标。
数仓分层原因
- 将复杂问题简化,将复杂的任务分解成多层来完成,每一层只处理简单的任务,方便定位问题;
- 减少重复开发,规范数据分层,通过中间层数据,能够减少极大的重复计算,增加一次计算结果的复用性;
- 隔离原始数据,不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开;
数仓主体就是DWD(data warehouse detail:数据明细层),DWS(data warehouse service:服务数据层),DWT(data warehouse topic:数据主题层)。其中DWS,DWT两层都是汇总数据,从DWD来。
各分层简介
ODS
存放原始数据,原始数据保持原状。原始数据一类是日志,一类是业务数据。业务数据从mysql导入进来,本身就是结构化的,以具体分隔符分割,可以直接记载到对应数据库。但是日志数据就不行,是一行一行的字符串,需要将字符串解析成可以导入hive的数据格式。
即ODS层主要是对日志进行解析,要考虑解析成多少张表,按照什么逻辑去解析?定下逻辑后,解析的SQL怎么写?
业务数据主要就是怎么建模?所谓的建模就是明确要建哪些表,明确表中有哪些字段,表与表之间有什么样的关联?建模有一些指导思想,比如维度建模,关系建模,数仓一般采用维度建模。
DWD
明细层是数仓中关键的一层,是数仓的地基。明细数据从ODS层来,明细数据就是最原始最详细的数据,即一行数据指代依次业务行为,比如说order_info,一行数据就是依次下订单行为,该行数据就是明细数据。
该层需要构建维度模型,一般采用雪花模型。
维度建模一般按照以下四个步骤:
选择业务过程→声明粒度→确认维度→确认事实
- 选择业务过程(有几张事实表)
在业务系统中,挑选我们感兴趣(后面会分析的)的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。
如果是中小公司,尽量把所有业务过程都选择。
如果是大公司(1000多张表),选择和需求相关的业务线