数据仓库之DWD层

数据仓库之DWD层DWD(DataWareHouseDetail)数据明细层,主要是将从业务数据库中同步过来的ODS层数据进行清洗和整合成相应的事实表。事实表作为数据仓库维度建模的核心,需要紧紧围绕着业务过程来设计。在拿到业务系统的表结构后,进行大概的梳理,再与业务方沟通整个业务过程的流转过程,对业务的整个生命周期进行分析,明确关键的业务步骤,在能满足业务需求的前提下,尽可能设计出更通用的模型。业务方有时只仅仅只是考虑了当下的情况。例如业务想要一个审核通过人员的明细数据,我们设计了一个全量的审核明细表,过了几天,业务

大家好,又见面了,我是你们的朋友全栈君。

DWD(Data WareHouse Detail)数据明细层,主要是将从业务数据库中同步过来的ODS层数据进行清洗和整合成相应的事实表。事实表作为数据仓库维度建模的核心,需要紧紧围绕着业务过程来设计。在拿到业务系统的表结构后,进行大概的梳理,再与业务方沟通整个业务过程的流转过程,对业务的整个生命周期进行分析,明确关键的业务步骤,在能满足业务需求的前提下,尽可能设计出更通用的模型。

业务方有时只仅仅只是考虑了当下的情况。例如业务想要一个审核通过人员的明细数据,我们设计了一个全量的审核明细表,过了几天,业务方又想要分析审核流程中每个环节的转化情况,我们又要设计一张增量的明细表。一张表就可以满足需要的事被弄成了两张,而如果放弃前一张表一方面否定了自己之前的工作,另一方面所有依赖的下游都需要变更取数逻辑,增加了工作量;不放弃表的数量增加,数据就有了两个逻辑出口,统一口径和数据管理也成为一个问题。而这一切都可以在模型设计前期与业务沟通的过程中避免。因此我们在与业务沟通时,一方面了解整个业务周期过程,另一方面要考虑的是从业务方的角度来,分析当下业务需求和未来潜在的需求,尽量做到一次设计,全面覆盖。

DWD层中主要的事实表有三种类型 : 事务事实表、周期快照事实表和累积快照事实表。

(一)事务事实表

事务事实表,主要分两种单事务事实表和多事务事实表。

1.单事务事实表

针对单个业务过程而设计一个事实表。这样的设计可以对每个业务过程进行单独分析,并且对于业务方而言,符合其逻辑认知,使用起来没有障碍。

2.多事务事实表

单事务事实表比较容易实现,但也有一定的缺点。1.在多个业务过程在维度和粒度一致的前提下,且业务过程维度较多而事实相对少的情况下,我们每个业务过程都需要去join关联维度,一方面存储量增加,另一方面多次重复的join维度带来的存储计算量也会增加。2.多个业务过程多张表,随着业务发展,表的数量明细资产太多不方便管理。所以就有了多事务事实表。

我们使用多事务事实表来替代单事务事实表需要明白3个问题 1.如何同时记录多个业务过程的信息(多事务的实现)?2.如何进行单个业务过程的统计分析(成为单事务事实表的替代品)?3.什么时候可以使用多事务事实表(多事务的局限性)?

针对第一个问题,一般而言针主要做法是对每个业务过程的度量都使用一个字段进行保存 ,即不同的事实使用不同的字段进行存放;如果不是当前业务过程的度量,则采取零值处理方式。这样我们取每个实例最新的一条记录就可以看到该实例截止到统计日期的业务进度。

针对第二个问题,单事务事实表一般用来分析无非从两方面入手,一个是明细数据,二是统计数据,统计某个时间区间内的事务发生频率,例如最近一周的下单数量。明细数据在多事务事实表中也会保存,而统计数据,我们需要对每个业务过程都设置一个是否当天完成的字段来解决。我们可以统计周期区间内有多少个当天完成作为统计结果。

针对第三个问题,1.多事务事实表中的多个业务过程其粒度和维度必须是一致的。如果粒度不一致则没办法整合在一起。2. 多事务事实表当实例没有在一天完结,则会存在多条数据,如果需要统计每个实例的业务过程时长或者要看每个实例的最新状态,需要筛选所有数据最新的数据,再对每条数据进行计算,比较消耗性能。

这里在给出多事务表在具体设计时的操作,传统的多事务表可能会一个业务过程一条数据,只有当前发生的业务过程有相应数据,其他数据均置零。假如一天一个实体有多个业务过程发生,我们应该有几条数据。这里有两种做法,一个是每个业务过程都有一条数据,非当前业务过程的度量都置零。这样的好处是我们统计度量时可以直接sum或者其他操作。另一种方式是保留最新业务过程之前的业务过程的所有度量,这样总条数会减少(同一天可能多个业务过程都完成),但是统计时必须要加上是否当天的标记来过滤再统计(保证一个业务过程只有一条记录有效)。

事务事实表区别:

单事务事实表 多事务事实表
业务过程 一个 多个
粒度 相互之间不相关 相同粒度
维度 相互之间不相关 一致
事实 只取当前业务过程中的事实,且需要为可累加事实 保留多个业务过程巾的事实, 非当前业务过程中的事实需要置零处理,且需要为可累加事实
冗余维度 多个业务过程 , 则需要冗余多次 不同的业务过程只需要冗余一次(记录次数<=业务过程数)
理解程度 易于理解,不会混淆 难以理解 , 需要通过标签来限定
计算存储成本 较多 , 每个业务过程都需要计算 较少 , 不同业务过程融合到一起 , 降低了储存计算量, 但是会存在大量零值。

(二)累计快照事实表

为了解决多事务事实表第三个问题的第二点,能不能有一张表保存实例所有的最新状态,这样我们就不需要每次统计全量数据都要取全量去重取最新数据进行计算统计。这其实就是累计快照事实表的产生。将所有实例都只保存最新的状态。其实现方式可以以拉链表的方式来实现,以事务表中历史最新数据作为初始数据,每天更新其中的数据。这样既可以保存一份全量数据,并且可以在表的基础上计算相关的业务时长。

但这也导致一个问题,数据量太大。如果每天都存储全量最新,我们必须要将表的生命周期设置相比较而言小一点。

(三)周期快照事实表

事务事实表主要储存的都是可累加行的度量。当需要一些状态度量时,比如账户余额、买卖家星级 、 商品库存、卖家累积交易额等,事务事实表就不太适合。就需要周期快照事实表。我们按照一定的周期进行汇总。周期快照事实表产出方式1.对于可以通过对事务表聚集的数据,从事务事实表中汇总得到,但是这样可能逻辑比较复杂。2.无法聚集的数据,从操作系统中以快照的方式同步下到ods层,再在进行加工。

表之间的关系图:

数据仓库之DWD层

总结

数据明细层是下游计算各种信息的基础,数据资产的底层建设,我们在设计时,尽量设计通用的模型。针对不同的业务需求,采用不同的表设计,本篇仅介绍了相关表的概念和逻辑,具体设计过程,要针对具体业务再展开。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153221.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • read函数原理「建议收藏」

    read函数原理「建议收藏」文章出处 http://blog.csdn.net/lwj103862095/article/details/38518069原始出处 http://blog.csdn.net/unbutun/article/details/6101354#ibm-pconRead系统调用在用户空间中的处理过程Linux系统调用(SCI,systemcallinterface)的

    2022年6月22日
    38
  • 数据库设计规范

    数据库设计规范数据库的重要性不言而喻。对程序员来说跟数据库打交道更是家常便饭。数据库给开发带来了巨大的便利。我们或多或少的知道一些数据库设计规范,但并不全面。今天我就简单整理一下,帮自己做个总结梳理,也希望可以帮到小伙伴们。数据库设计规范包括命名规范、库表基础规范、字段规范、索引规范和SQL设计规范。1.命名规范1.1库名、表名、字段名禁止使用MySQL保留字。1.2库名、表名、字段名使…

    2022年7月12日
    24
  • Vue双向绑定原理(4改)

    Vue双向绑定原理(4改)Vue双向绑定的原理 双向数据绑定是通过数据劫持、结合、发布订阅,的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变; 使用watch来连接数据与视图,当数据发生变化时,触发通知所有该数据的对象进行更新。这!就是vue的双向绑定原理,你学会了吗?…

    2022年10月18日
    6
  • 软件安装 —— 使用官方ODT定制安装Office

    软件安装 —— 使用官方ODT定制安装Office前言正在MacOS11的BigSur如火如荼的宣传着,我这不争气的Windows系统也终于越看越是臃肿,做为生产力工具,第一还是要稳定精简,一气之下,直接换上了Windows特别版本LTSC,据说这个版本特别特别稳定,很长时间才会更新一次,但用过的都说好,想想还是激动的。重装系统是一个重大工程,那做为Windows第二重要的软件Office目前的安装模式要么官方下载安装包要么离线部署,而官方的安装包可谓是一键超级全家桶搬进C盘,有用的没用的全部装一遍,最终还是靠离线部署来安装了,可以定制想要的软件,还

    2025年10月11日
    3
  • 如何避免手机失窃后倾家荡产——手把手教你设置SIM卡密码(也就是PIN密码)

    如何避免手机失窃后倾家荡产——手把手教你设置SIM卡密码(也就是PIN密码)

    2020年11月8日
    631
  • tomcat 部署war包的两种方法「建议收藏」

    tomcat 部署war包的两种方法「建议收藏」编辑tomcat/conf/server.xml文件viserver.xml->ESC+i->编辑后->ESC+:wq!第一种:添加一个Service                     connectionTimeout=”20000″                redirectPort=”9443″/>    

    2022年5月22日
    133

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号