栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

数据建模之宽表模型

数据建模之宽表模型

目录

1 什么是宽表

2 为什么要建设宽表

3 宽表的不足

4 如何设计宽表

5 小结


1 什么是宽表

宽表:从字面意义上讲就是字段比较多的数据库表。

(1)通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询性能的提高与便捷。这种宽表的设计广泛应用于数据挖掘模型训练前的数据准备,通过把相关字段放在同一张表中,可以大大提高数据挖掘模型训练过程中迭代计算时的效率问题。(一句话,空间换时间,便于训练迭代、减少表关联数量,修改少量数据时不需要该多张表)

(2)在数据仓库建设中,组织相关和相似数据,采用明细宽表,复用关联计算,减少数据扫描,提高明细数据表的易用性

(3)在汇总数据层,加群指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。

2 为什么要建设宽表

就像我们前面说过分层的目的是为了管理方便、开发高效、问题定位、节约资源等等,那么我们建设宽表呢?前面学习建模方法论的时候,提到过维度模型的非强范式的,可以更好的利用大数据处理框架的处理能力,避免范式操作的过多关联操作,可以实现高度的并行化。数据仓库大多数时候是比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来提升查询效率,星型模型对OLAP的分析引擎支持比较友好,这一点在Kylin中比较能体现。

可以更好的发挥大数据框架的能力

维度模型可以更好地利用大数据框架,体现在哪里的,体现在数据数据冗余,可以避免很多的关联,怎么体现的呢,宽表。但是这只是站在大数据框架层面上的理解,还有其他层面上的理解。


可以提高开发效率

一般情况下,我们的宽表包含了很多相关的数据,如果我们在宽表的基础上做一些开发,那就很方便,我们直接从宽表里面取数据,避免了我们从头计算,你设想一下你要是没次都从ods开发一张报表,那是多痛苦的体验啊。

可以提高数据质量

宽表的准确性,一般都是经历了时间的检验的,逻辑错误的可能性很小,可以直接使用,要是让你从头开发,那这个过程中可能因为对业务理解不透彻或者是书写的逻辑不正确,导致有数据质量问题
可以统一指标口径

其实这一点和上面一点有点重复,但是这两点的强调的方面是不一样的,因为如果我们的报表要是都能从我们的底层宽表出,那么我们报表上的指标肯定是一样的,其实这一点我相信很多人都深有体会,同一个指标的口径不一致,导致我们提供的数据在不同的出口不一样,是业务部门经常提出的一个问题。其实这也就是我们一直强调的核心逻辑下沉的原因。

3 宽表的不足

(1)数据冗余较多,不满足三范式

 由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余

(2)稳定性差

宽表主要依赖其他表比较多,每一个表的稳定性都将影响宽表的结构,比如说线上业务表结构变更,宽表模式改造量也比较大

(3)开发难度大,维护成本高

宽表本身依赖较多,涉及的业务逻辑繁多,所以给我们的开发就带来了挑战,而且由于业务逻辑的变更我们也需要去维护着复杂的逻辑,例如每次变动可能会在几千行SQL中加逻辑

4 如何设计宽表
  • 宽表的多宽【明确主题,明确数据域】

开始之前,我们思考一个问题,那就是宽表到底有多宽,就想我们前面讲分层的时候说其实我们不分层也玩得转,早起的数仓就只有一层,现在我们考虑一个问题那就是宽表到底多宽才合适,其实你要把所有的数据装进去也可以。

所以我们要思考到底多宽才合适的,前面我们介绍过数据域的概念,我们与其回答多宽这个问题,不如回答宽表都应该覆盖哪些数据,但是这个问题也不好回答,但是我们可以反着思考,宽表不应该包含什么数据,这个问题很好回答,宽表不应该包含不属于它所在域的数据,例如会员域的宽表只应该包含会员相关的信息,同理我们的宽表是针对某一个域而言的,也就是说它是有边界的。

这下我们再来回答宽表到底多宽,只要不跨域,并且方便使用都是合理的。但是这似乎并不能解决我们上面提到的宽表的不足,只是指明了宽表的一个大致的方向。有了方向之后我们通过我们的设计策略就可以让宽表瘦下来。

  • 主次分明【主要数据是什么,次要数据是什么,要把握主度】

主次分离,其实我们经常听到的一句话就是做事情要搞清楚主次,我们看一下表设计的主次是什么,假设我们做的是一个会员域的宽表,但是会员域是还是一个比较大的概念,所以我们还要发掘出我们这个表的主题,例如我们做的是一张会员域下的会员基本信息宽表,那么我们专注的肯定就是基本信息,例如会员信息打通。当让因为事宽表你可能还会冗余的其他信息进来,但是当这样的信息越来越多的时候,我们这张表的主题就越来越弱,所以我们就需要做拆分。

拆分可以让我们更加聚焦表的主题,对于数仓开发人员而言可以更好的维护、对于使用方而言可以更加清楚的理解这张表的主题。

  • 冷热分离【明确常用字段和不常用字段,做好拆分】

除了前面的主次分离我们还可以做冷热分离,其实冷热分离这个词我相信你不是第一次听到,但是怎么看这个事情呢,你想一下你在数据存储的时候是怎么做冷热分离的,这里也是同样的理念。

假设我有一张宽表,里面有200个字段,有30张报表在使用它,但是我发现前面150个经常字段经常被使用,后面 50个字段只有一两张报表使用到了,那么我们就可以做一个冷热分离,将宽表拆分。

  • 稳定与不稳定分离

其实前面的主次分离、冷热分离都可以提高稳定性,但是前面我们不是为了稳定性分离的。

我们经常有这样的宽表,它依赖埋点数据,但是我们的埋点数据的特点就是量大,导致计算经常延迟,那么我们的宽表就会受影响,从而我们的报表就受影响,但是很多时候你发现报表根本没有用过埋点计算出来的指标,或者是只用了一两个。那我们可以将其拆分,如果报表没有使用到那就最好了,如果使用到了,那就后推,在报表层面上做关联,这样我们的埋点数据即使出不来,我们的报表数据还是可以看的。

5 小结

本文总结了宽表模型的设计理念,优缺点,及在大数据开发中的作用。宽表模型在数仓中被广泛使用,作为一种重要的数据模型,本文进行了分析和总结。
 

参考链接:https://blog.csdn.net/king14bhhb/article/details/118189602

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号