数据仓库大数据那些事数据仓库

数仓入门基础-6-数仓建模

2019-04-22  本文已影响0人  乌拉乌拉儿

个人博客: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.规范性

相同含义字段需在多表中命名一致,表命名需清晰规范,便于查询及使用,后续将统一讲数仓规范。

上一篇下一篇

猜你喜欢

热点阅读