个人博客:https://renwula.github.io/,本系列基于互联网公司数仓,使用hive搭建数仓
从业中,数仓建模是一个数仓工程师需要的必备的能力,优秀的分层设计能够让整个数据体系更易理解和使用。所以想入行数仓数仓分层是需要补一补的,才能知道分层的意义。
很多人都不理解为什么分层,分层的意义是什么,分层有这么重要吗?是的就是这么重要,说一下我的理解:
>1.理清业务数据:随着数据量和业务数据表的不断扩张,需要我们理清数据作用域,就是做什么的,可以清晰的找到数据来源。
>2.避免重复计算:为了避免多次计算,多次关联多张表,分层可以保存中间结果,减小开发成本。
>3.增加数据使用便捷性:仓库层的设计,让数据能分析,好分析,能支持大部分的数据需求。
>4.避免数据分歧:统一数据口径,保证数据质量,避免出现统一指标多种概念。
比较通用的简单的维度建模分层,分为三层:
一、ODS层,操作数据层
把操作系统的数据几乎无处理的存放在数仓中,主要有以下工作:
1.将业务结构化数据增量或全量的同步进来;
2.将日志等非结构化的数据结构化处理后落地到数仓中;
3.累计历史数据,根据数据业务需求、审计等要求保存历史数据、清洗数据,保留的数据快照也便于回溯问题。
二、CDM层,公共维度模型层
存放明细事实数据、维度数据及公共指标汇总数据,统一口径,保持数据一致性,减少数据重复计算,CDM层分为DWD层和DWS层。
1.DWD层,明细数据层
dwd层对业务数据进行清洗、规范化,例如去除作弊数据,对数据字段进行规范命名从而避免歧义化等,另外可采用维度退化手段,将维度退化到事实表中,减少事实表与维度表的关联,提高明细表的易用性。
2.DWS层,汇总数据层
dws层,加强指标的维度退化,采用更多的宽表化的手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。
三、ADS层,应用数据层
ads层存放数据进行个性化的指标计算,不共用性、复杂性(指数型、比值型、排名型)等,会基于应用数据组装,像大宽表集市、横标转纵表、趋势指标串等,另外由于ADS某些指标具有个性化的特点,尽量不对外提供服务。
举个例子
1.ods层会将各种日志数据及业务库中数据或者其他一些数据,进行数据落地。
2.dwd层,像用户登录表,会做以下一些操作
>2.1去除爬虫等异常数据,保持数据质量
>2.2规范统一数据字段
>2.3拆解需拆解的字段
>2.4融合各端数据
3.dws层,像用户主题表,会做以下一些操作
>3.1统计操作轨迹用户数数据
>3.2统计用户购买商品数,登录次数,订单数,退货数,
>3.3增加用户维度,时间维度
4.ads层,像用户转化漏斗,可以利用dws层数据进行维度分析,分析漏斗,为产品做决策
建模的基本原则
简单讲建模的一些原则,在建模的考虑中需要加以考虑,避免后续遇到大坑措手不及,而不要简单的为了建模而建模。
1.高内聚&&低耦合
主要从数据业务特性和访问特性两个角度来考虑:
将业务相近或者相关、粒度相同的数据设计为一个逻辑或者物理模型;
将高概率同时访问的数据放一起 ,将低概率同时访问的数据分开存储。
2.核心模型与扩展模型分离
核心模型包括的宇段支持常用的核心业务,扩展模型包括的字段支持个性化或少量应用的需要,不要让扩展模型包括的字段过多的入侵核心模型,破坏核心模型的性能及简洁等
3.存储成本与计算性能均衡
在很多时候,设计可能清晰,但存储成本很高,或存储成本很小但计算逻辑复杂,性能差,都需要做一个比较,做到均衡,而非执意孤行。
4.公共逻辑下沉及统一
避免重复计算,需将公共逻辑在底层实现并统一口径
5.幂等性
处理逻辑不变,多次执行结果需保持一致。
6.规范性
相同含义字段需在多表中命名一致,表命名需清晰规范,便于查询及使用,后续将统一讲数仓规范。