[转]科普 | 什么是宽表?

article/2025/10/12 0:50:16

科普 | 什么是宽表?一文带你了解

数据仓库宽表_数据宽表_吕归尘0的博客-CSDN博客

一、什么是“宽表”?

“宽表”从字面上的意思就是字段(列)比较多的数据库表,是通过关联字段将多个业务主题相关的数据表进行挂接组装为一张大表,实现业务实体不同维度属性信息的统一存储。

例如,开展不动产登记资料查询业务,需要获取权利人、证件号、不动产产权证号、坐落地址、规划用途、房屋性质、建筑面积、抵押登记状态等信息。而在不动产数据库中,上述信息可能分布在购房人信息表、自然幢属性表、户属性表、房地产权属性表、抵押权属表等多个库表中。用户每一次查询都需要在上述的多张数据表中按照关联字段逐一跨表查询,这种操作在数据库中是非常耗时的。

                                                        多表关联查询图(模拟数据)

而宽表则是按照不动产登记资料查询业务的需求,提前将相关业务数据表进行抽取、组装,串接为以权利人为实体的一张信息集成表,包含了人、房、地等多元信息,因此不动产登记资料查询只在单表中即可完成。

                                                               不动产权利人宽表(模拟数据)

可以得到关于宽表的两种解释:

2. 存放核心业务实体不同维度属性的数据库表,可以称之为宽表3. 存放核心业务实体在业务履行流程中的信息&上下游的关联信息,可以称之为宽表

二、为什么要用宽表?

01、宽表查询更便捷

宽表提前处理好多表间的关联,查询人员无需了解数据库表间的关联关系即可实现数据分析,这也避免了进行关联查询时可能出现的逻辑错误。

02、宽表查询效率更高

宽表设计的目的就是为了提高查询的效率,将相关字段都放在同一张数据库表中,避免了大量的关联串接,增加了查询效率。例如:在PG数据库中,1000多万条数据,使用宽表可以提高约25倍查询效率。

                                                                        查询效率对比

03、宽表信息更丰富

宽表的设计无需按照数据库三范式进行,而是按照主题或者专题的应用需求,将实体对象相关的指标、维度、属性等各类型的信息都放在同一张表进行存储,通常作为数据仓库中DWS(汇总数据层)。

例如,上文中的不动产权利人宽表,除增加不动产登记数据库中的库表外,还可以根据业务需求,增加租房信息、户籍信息、收入信息等,为后续开展业务查询、在线数据分析(OLAP)、数据分发、数据挖掘等提供基础。

三、宽表存在的问题

01、数据冗余

多表关联生成宽表时,有可能存在一对多的关系,导致产生冗余数据。比如:户表中有面积字段,购房人表和户表通过单元号进行关联时,户表是一对多的关系,那么在宽表中的面积字段就会出现重复,如果直接通过面积字段进行汇总统计就会出错。

                                                                 宽表冗余

02、维护成本高

多表关联生成宽表后,根据业务场景的变化,宽表中字段可能会出现增减的情况。另外,随着数据更新可能出现业务库表与宽表数据之间出现数据不一致的问题。

四、如何优化宽表?

01、分区表 (Hash分)

在实际的应用中,由于业务数据的不断迭代,宽表可能达到上千万行甚至上亿行,存储压力增加,性能受到极大影响,此时需采用分区表的方式将一个表分成多个小的部分,减小数据冗余带来的存储压力,提高查询吞吐量。

如利用唯一ID、业务主键、行政区划等字段,将数据表拆分为多个子表,从而实现数据在物理上的分区。例如将不动产查询宽表,按照ID序号,拆分为3张数据库表,查询时多个子表同步查询,查询更快,提升宽表查询效率。

                                                                                宽表分区

02、索引优化

如果将数据库表比喻为一本书,创建数据库索引就相当于创建书的目录。创建索引能够实现对目标数据的定位,从而到达快速检索的目的。针对宽表应用较多的任意字段组合查询,采用每列独立索引,保障读写性能的均衡。例如,在PG数据库中,针对宽表进行索引创建优化后,性能提升约2倍。

                                                        索引优化后效率对比

03、使用列式存储

使用列存储(如Hbase)有利于对宽表进行数据压缩,同时可以提升数据读取效率。其原因:一是数据库表中同一列数据类型一致,采用压缩算法可以达到更高的压缩率;二是列存储每次读取的数据是集合的一段或者全部,能够提高读取效率。

五、宽表应用场景

六、如何构建宽表

1、 选取想要构建宽表的业务流程,梳理业务流程中的所有活动;
2、 梳理参与这些活动的核心业务实体;
3、 选择业务最关注的实体来构建宽表;
4、 确定宽表的数据颗粒度;
5、 选取属性
    1、核心实体相关的属性
    2、上下游相关联的核心实体的属性(按需选择)
    3、先关的维度属性(时间、地点、客户、产品等)(按需选择)
    4、统计标签(按需选择)
6、 设计Mapping & 测试用例
7、 实施、测试、上线、回归测试
 


http://chatgpt.dhexx.cn/article/u7IlRJiq.shtml

相关文章

数仓建模,宽表是什么?如何设计?

数仓建模,宽表是什么?如何设计? 宽表的设计为什么要建设宽表宽表的好处和不足如何设计宽表总结 宽表的设计 其实宽表是数仓里面非常重要的一块,宽表主要出现在dwd 层和报表层,当然有的人说dws 层也有宽表,…

线性代数笔记22——特征值和特征向量

特征向量 函数通常作用在数字上,比如函数f作用在x上,结果得到了f(x)。在线性代数中,我们将x扩展到多维,对于Ax来说,矩阵A的作用就像一个函数,输入一个向量x,通过A的作用,得到向量Ax。…

特征值和特征向量意义

本文转载自https://blog.csdn.net/fuming2021118535/article/details/51339881,版权问题请联系博主删除 在刚开始学的特征值和特征向量的时候只是知道了定义和式子,并没有理解其内在的含义和应用,这段时间整理了相关的内容,跟大家…

特征值和特征向量的几何含义理解

在刚开始学的特征值和特征向量的时候只是知道了定义和式子,并没有理解其内在的含义和应用,这段时间整理了相关的内容,跟大家分享一下; 首先我们先把特征值和特征向量的定义复习一下: 定义: 设A是n阶矩阵&am…

线性代数之——特征值和特征向量

线性方程 A x b Axb Axb 是稳定状态的问题,特征值在动态问题中有着巨大的重要性。 d u / d t A u du/dtAu du/dtAu 的解随着时间增长、衰减或者震荡,是不能通过消元来求解的。接下来,我们进入线性代数一个新的部分,基于 A x …

特征值和特征向量概述-面试必问3(含特征值、向量意义)

特征值和特征向量(Eigenvalues and eigenvectors) 在线性代数中,一个线性变换的特征向量(eigenvector 或者 characteristic vector)是一个非零向量。将线性变换应用在它上面,它最多以一个标量因子进行伸缩…

java 如何实现深拷贝

1、什么叫Java浅拷贝?  浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型)&…

单例模式之枚举实现

如果你没有学过单例模式,请点击:确保对象的唯一性——单例模式。 有很多网友留言说我漏掉了一种非常重要的Java语言的单例模式实现方式——枚举。^_^ 这篇姗姗来迟的博文将弥补这个“巨大的”缺陷。^_^~~~~~~~~~~~ 在Java语言中,如果综合考虑…

vue实现购物车功能

随着时代发展&#xff0c;网购成了人们必不可少的一部分&#xff0c;所以我们常常遇到要实现购物车功能&#xff0c;如下图&#xff0c;我们来分析一下 下图所示页面: 首先&#xff0c;我们通过ElementUI中的<el-table>标签来实现页面的呈现。 其次&#xff0c;我们可以看…

css实现轮播图

轮播图&#xff1a;就是多张图片按照一定的时间和顺序依次从某个窗口来向用户展示图片 轮播图的实现代码&#xff1a; 1&#xff09;创建一个容器来进行轮播图的展示 这里的容器就是最外部的盒子 注意最外部盒子设置宽高时要与我们进行展示的图片的宽高保持一致&#xff0c…

RabbitMQ实现延迟队列的方式

1.背景 最近在做类似拍卖系统的上架功能&#xff0c;卖家上架物品以后&#xff0c;例如到期时间24小时或者48小时&#xff0c;如果无竞拍者或者购买者&#xff0c;则物品自动下架到用户的邮件中。诸如电商用户下单&#xff0c;30分钟未支付&#xff0c;则自动取消订单&#xff…

接口的实现详解

接口 接口就是定义的规则&#xff0c;规范。 声明类时需要使用的关键字时class&#xff0c;声明接口的关键字时interface&#xff1b; 接口本身就是抽象的&#xff0c;需要一个实现类去实现接口中定义的内容。 接口当中不能定义方法&#xff1a; 接口本身就是抽象的 所在我们…

Qt实现简易计算器

目录 写在前面 一、设计思路 效果展示&#xff1a; 二、功能实现 三、设计代码 1.mainwindow.cpp 2.calculate.cpp 写在前面 上篇文章写了C中如何实现简单的计算器&#xff0c;先用C写看来我的选择是正确的&#xff0c;明白了其中的原理再用Qt实现是水到渠成的事&#…

vue实现复制功能

目录 一、vue实现复制功能 1.功能实现 2.模板结构 3.js行为 4.样式 二.延伸扩展 一、vue实现复制功能 1.功能实现 点击复制弹出复制成功信息&#xff0c;粘贴即可获得复制数据。 2.模板结构 在自己想要复制的内容所在标签上添加一个类名和一个点击事件方法&#xff0c;…

多态的实现

多态实现条件 在Java中要实现多态&#xff0c;那么必须要满足以下几个条件&#xff0c;缺一不可&#xff1a; 必须在继承体系下 子类必须要对父类中的方法进行重写 通过父类的引用调用重写的方法 多态体现&#xff1a;在代码运行时&#xff0c;当传递不同类对象时&#xff0c;…

java实现接口

接口的简述&#xff1a; 1、在java编程语言中&#xff0c;接口是属于抽象类型的&#xff0c;是抽象方法的结合&#xff0c;用interface来定义接口&#xff0c;一个类通过继承接口的方式&#xff0c;从而来继承接口的抽象方法&#xff1b;类可以继承接口&#xff0c;但是接口不可…

java实现链表

一、链表定义 链表通过指针将一组零散的内存块串联在一起进行使用。 数据格式&#xff1a; 根据上面的图展示&#xff0c;每个内存块可以称为链条的一个“结点”&#xff0c;结点包含了数据和下一个结点的地址&#xff1b;同时有2个结点特殊&#xff1a;第一个结点和最后一个…

redis实现延迟队列

前言&#xff1a;redis实现延迟队列该怎么做&#xff1f;在这里我分享一下 redis实现延迟队列 一、Redis实现延迟队列二、redis失效监听事件三、此种实现面临的问题四、开发准备五、基础实现六、使用redisson实现延迟队列七、redisson实现延迟队列的原理八、延迟队列配置九、疑…

如何设置时间格式

如何设置时间格式 开发工具与关键技术&#xff1a;VisualStudio C# 作者&#xff1a;落白 撰写时间&#xff1a;2019/06/26时间格式的转换是一个令人头疼的存在&#xff0c;格式稍微出了一点差错就保存不进数据库&#xff0c;或者在类型为时间类型的input标签中显示不出来。搞…

html如何修改时间,html怎么设置时间

html设置时间的方法&#xff1a;首先创建一个div&#xff1b;然后给该div添加一个class属性&#xff1b;最后通过“function realSysTime(clock){...}”方法设置时间即可。 本文操作环境&#xff1a;windows7系统、HTML5&&CSS3版、Dell G3电脑。 HTML设置一个当前时间s…