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

作者: 乌拉乌拉儿 | 来源:发表于2019-04-22 00:01 被阅读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.规范性

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

    相关文章

      网友评论

        本文标题:数仓入门基础-6-数仓建模

        本文链接:https://www.haomeiwen.com/subject/optegqtx.html