数仓维度建模实例

article/2025/9/28 10:07:23

简介

本文将介绍维度建模理论和基于自己经验的实施步骤

  数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据....只有数据模型将数据有序的组织和存储起来之后,大数据才能得到高性能、低成本、高效率、高质量的使用。

一般业务系统报表开发模式是java写sql从业务库算出结果数据,这样是可以快速出来结果,但有几个问题:
1)对业务库的影响
2)扩展性,比如页面又想加表的量程查询维度
3)当数据需求越来越多时,怎么维护

这时就需要数据仓库来对接源系统,计算结果数据给到应用,将数据分析和业务处理分离。 数仓建模描述的就是这么设计数仓里的表和表间关系, 和用powerdesigner做业务系统表设计作用差不多,只不过数仓是面向数据分析(OLAP)而业务系统是面向业务处理的(OLTP)
数仓中一般描述成: 数据模型–>业务过程—>数据域
在这里插入图片描述

常见的建模方式有:Inmon提出的ER(3NF)建模 , kimball提出的维度建模,datavalut和anchor模型用得都很少。这里只阐述项目中用到的维度建模。

一、 维度建模理论

根据鄙人多年实施经验, 上去就干的方法多半会凉凉, 表越来越多,重复的,废弃的…所以需要理论指导我们实践,在实践中完善优化理论。​《数据仓库工具箱: 维度建模权威指南》,链接:https://pan.baidu.com/s/15LL8MrpNl80skIlFvhnIgg 提取码:ypha 这里只阐述项目中用到的部分。

​ 维度建模的优势: 以用户容易理解的方式发布数据(过程简单易于实施)和高效的数据查询性能
​ 三个重要概念: 总线架构(Bus Architecture),一致性维度(Conformed Dimension)和一致性事实(Conformed Fact)

搭建好大数据平台后,做数仓分层规划,然后就要建立整个企业内具有统一解释的标准化的维度和事实 ,即一致性维度和一致性事实。然其他需求都按这个体系结构来进行迭代开发。

总线架构

总线架构是一种结构化的、增量式的构建数仓的方法。
在这里插入图片描述
上图的日期,产品…就是一致性维度 , 销售,库存就是一致性事实表。
理解总线:电脑的IO总线,按约定的标准将鼠标,键盘,usb等串联起来使之可以协同工作。 类比过来
企业数仓中,用一致性维度和一致性事实把各个业务动作(销售,库存,订单)串联起来,使之可以方便的分析查询数据

通过总线矩阵梳理出一致性维度和业务过程的关系,就是分析源系统有哪些业务过程, 过程中会涉及什么维度,X越多说明这维度越重要,就应该先建立。
在这里插入图片描述

维度建模的主要步骤

上一步已经有了一致性维度的构想,接下来通过以下步骤,构建一个业务数据分析模型

1、选择业务过程
业务过程是组织完成的具体活动,如:接收付款,开具发票,下订单...用户的核心业务是什么?2、声明粒度
精确定义某个事实表中一行的含义,回答“如何描述事实表中的行内容?”3、确认维度
维度要解决的问题“业务人员如何描述来自业务过程量事件的数据”,表示承担每个度量环境中所有可能的单值描述符。4、确认事实
解决“过程的度量是什么?” ...典型的事实是可加性的数值...需要将数据源和用户需求结合起来

一个简单的维度建模结果如下:
在这里插入图片描述
可以看到这样的结构
1)可以快速扩展,比如添加一个供应商维度表,就可以分析供应商和零售的关系
2)快速提供结果数据, 比如查询每年农历新年的销售数据
3)结构简单便于理解
当然在实施过程中需求对接,维度变化,数仓标准,一致性维度,快照事实表等等都是问题,在业务场景章节会进行实例解析。

复杂的模型比如Teradata的LDM, 这样的模型是数据分析师和业务专家,对业务的深度沉淀,基于这个模型能提供给财务用户提供想到的以及还没想到的数据信息,指导财务数据分。不用像传统模式去调研开发,直接部署灌入自己的数据就分析,这就是好的模型的牛逼之处
在这里插入图片描述

二、实施策略

“道理听了很多,却依旧过不好人生” 怎么办? 那是因为还缺少切实可行的实施策略。
很多方法论都太理想,比如上去就梳理各个系统业务,做大而全的,画大饼;建议:选择最有价值的业务需求,或者领导最关心的作为切入点, 做出来,再逐步增加。 下图是基于OneData结合我项目的实际调整后的实施步骤:
在这里插入图片描述

调整原因:

  1. 阿里或者维度建模理论是没有明确需求的情况下,做一个大而全的数仓,再通过数仓输出数据报表。 而我们的情况是有明确需求(有产品原型图)
  2. 在资源有限(人力,时间,成本)情况下,通过需求倒推设计统一维度表和事实表, 再结合维度建模的理论形成可扩展的数仓模型。这个策略在之前的项目中有成功的实用

实例

Step 1. 数据调研

​ 由产品经理进行,交付的是需求文档,产品原型图 , 当数仓成熟后可以基于数仓主动为业务提供数据产品。一般会进行需求评审以判断需求的可行性和性价比。 对于比较复杂的指标需要提供指标说明文档,指导数据开发以及作为产品使用文档的一部分交付客户。
说到产品文档,就真一言难尽… 对于复杂的指标希望产品经理能提供类似这样的指标说明
在这里插入图片描述
指标说明示例下载地址 https://download.csdn.net/download/BI_Worker/85136111

以下以“水表接入数统计报表”为例说明建模全流程,公司对保密要求比较严我就简化下
在这里插入图片描述
查询条件: 租户名称
展示内容: 租户,开户时间,水表型号,接入数量,累计数据

Step 2. 结果表设计

​ 一般的报表是由数据开发,后端开发和前端开发协同完成。为避免后端等待数据的情况,在明确需求后,数据开发设计ADS层的表结构 与后端、产品评审。评审后确认后填充模拟数据。一般用在线文档的模式方便共享, 这样后端和前端就可以进行开发调试,后续换成真实数据即可快速上线。

ADS层的原则是让数据应用最高效的查询到所需要的数据,但要注意 :

  1. ADS层并不是严格的一个报表页面对应一个数据库表,根据实际情况做调整可以一张数据库表支撑多张同类型的报表页面
  2. 列名尽量保持与源系统一致

在这里插入图片描述
结果表评审内容
▶ 数据开发对指标定义的理解是否准确
▶ 是否有对应的数据支撑,如果没有怎么替换
▶ 用户量,数据量,什么情况下使用?查询频率
▶ 扩展的内容是否合理,比如我新加了开户,销户数

关于生成模拟数据,有对应的python脚本, 参考我其他文章。
注意所有步骤的表名称,字段,分区等都要按照数仓规范进行

Step 3. 源表梳理

​ 明确了ADS的输出再反推回来需要哪些源数据。同时要清楚什么业务动作产生, 来自于哪些数据库,哪些表 。参考第三章相关内容,输出源表-ODS映射
在这里插入图片描述
上面收集的信息是通过需要的结果倒推出维度建模的第一步“选择业务过程”, 也是指导ETL开发和数据资料的原始资料,随着业务增多考虑用atlas进行管理。
tips:
多多仔细查阅:
1)公司svn上的产品使用手册
2)业务系统原型图产品设计文档
3)业务系统据库设计文档
在与相关人员讨论,需要准备具体的有价值的问题

建模的第二步“声明粒度”其实也完成了, water_meter表就是就是我们达成共识的,最细粒度每一行表示每个表计的状态信息。

​ 这些表都会进入ODS层,所以在抽取之前就要输出ODS数据表设计文档,建议用PowerDesigner 做,主要信息是表间关系和关联字段,但没有键约束后续要在ODS层新加表之前,要先查询本设计文档,避免重复抽取。

Step 4. 构建总线矩阵

通过总线矩阵分析业务动作中涉及到的维度信息, 将同类型的维度提炼成维度表,这里完成了第三步“确认维度” 就是生成对应的维度表。 维度表设计有很多技巧,建议大家阅读原书
将尽可能的多的维度信息放入维度表中,方便聚合查询。 比如日期维度表中加入节假日,是否放假。 就能快速统计节假日相关的数据
在这里插入图片描述

Step 5. 构建指标

对应第四步“确定事实”,简单说:业务过程可以沉淀出哪些可加性指标?把这些指标设计成宽表再关联上一致性维度表,DWD层的明细模型就完成了。

gas_meter上卷一层后从最细的设备id到了用户id,设备id的通气日期汇总后得到接入数(原子字表), 计算截止到统计日期的累计值(派生指标)
在这里插入图片描述

后面DWS就是基于这一层再加工一次形成汇总模型:
▶ 更粗粒度的汇总,比如dwd存的是没个每天的接入量, dws再汇总一次计算每月的接入
▶ ADS直接存结果表记录

Step 6. 数据开发及上线

1) 开发对的脚本生成以上5步的结果数据

2) 进行数据验证确保准确

3)部署到调度平台调度监控

交付的是相关脚本及etl流程说明

相关术语说明

名词术语解释
数据域/主题域一系列相关业务过程的合集,其中,业务过程可以概括为一个个不可拆分的行为事件,在业务过程之下可以定义指标和维度
业务过程指企业的业务活动事件,如下单、支付、退款都是业务过程。请注意。业务过程是一个不可拆分的行为事件,通俗地讲,业务过程就是企业活动中的事件
统计周期用来明确数据统计的时间范国或者时问点。如最近 30天、自然周、截至当日等
修饰词类型是对修饰词的一种抽象划分。修饰类型从底于菜个业务城,如日志域的访向终赏类型涵盖无线淌、PC端等修饰词
度量/原子指标原子指标和度量含义相同,基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,具有明确业务含义的名词,如支付金额
派生指标派生指标=一个原子指标+多个修饰词+统计周期
维度实时表中的描述性信息,如国家,时间,地点等

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

相关文章

数据仓库-基础知识(维度建模)

一、数据仓库概述 1.1 数据仓库定义 数据仓库:Data Warehouse,是为企业所决策制定过程,提供所有支持类型的数据集合。用于分析性报告和决策支持。数仓是一个面向主题、集成的、相对稳定、反应历史变化的数据集合,随着大数据技术的…

数仓:维度建模

1.背景 数据仓库的核心是展现层和提供优质的服务。ETL 及其规范、分层等所做的一切都是为了一个更清晰易用的展现层。 2.数仓架构的原则: 1、底层业务的数据驱动为导向同时结合业务需求驱动 2、便于数据分析屏蔽底层复杂业务简单、完整、集成的将数据暴露给分析层…

数仓建模(维度建模)

目录 一、什么是建模?(为什么建模) 二、模型的好处 三、建模的方法 四、维度建模 4.1 基本概念 4.2 为啥选择维度建模(优缺点) 4.2.1 优点 4.2.2 缺点 4.3 维度建模-星型模型 4.4 维度建模-维度 4.4.1 维度之…

维度建模的三种模式

1.星型模式 星型模式是维度模型中最简单的形式,也是数据仓库以及数据集市开发中使用最广泛的形式。 星型模式由事实表和维度表组成,一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表。 星型模式的物理模型像一颗星星的形…

维度建模概述

1、维度建模 维度建模以分析决策的需求出发构建模型,构建的数据模型为数据分析服务。它重点解决如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。 因此,说白了,所谓的维度建模就是一种组织数据仓库的形式、模型…

ETL自学之路-02(维度建模)

一、维度建模的基本概念 1.1维度建模的定义 维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法,数据集市可以理解为是一种小型的数据仓库。 1.2 维度表(dimension) 维度表示你…

维度建模

维度建模 维度模型简介 维度建模被广泛接受为数据分析的首选技术,因为它同时满足了两个需求: 1.向用户交付可以理解的数据 2.提供快速查询的性能 维度建模实体建模第三范式(3NF)建模适合表连接以及聚合计算的查询请求&#xff1…

数据模型建设-维度建模详解

5.2 维度建模 维度建模是一种将大量数据结构化的逻辑设计手段,包含维度和指标,它不像ER模型目的是消除冗余数据,维度建模是面向分析,最终目的是提高查询性能,所以会增加数据冗余,并且违反三范式。 维度建…

绘制彩色图的颜色直方图

计数直方图 在Opencv中已经集成了关于彩色图像直方图计算的函数,形式如下: import cv2cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])参数 images:array-like类型,要计算的图像(单张或多张)&a…

matplotlib 图像颜色直方图

参考学习 定义 cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) ->hist imaes:输入的图像channels:选择图像的通道mask:掩膜,是一个大小和image一样的np数组,其中把需要处理的部分指定为1,不需要处理的…

OpenCV—python 颜色直方图与直方图均衡化

文章目录 一、颜色直方图1.1 使用opencv展示直方图1.2 使用matplotlib绘制 二、直方图均衡化2.1 全局直方图均衡化与自适应均衡化2.2 使用查找表来拉伸直方图2.3 直方图均衡化—RGB2YCrCb2.4 直方图均衡化—RGB2YUV 一、颜色直方图 1.1 使用opencv展示直方图 函数 cv2.calcHis…

颜色直方图和颜色矩

来源:http://www.xuebuyuan.com/2019161.html 1、颜色直方图 颜色直方图所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。 …

颜色直方图 灰度图彩色图

1.读取照片 cv2.imread(图片路径,cv2.IMREAD_COLOR) 2.定义color变量(b,g,r) 代表三个通道 3.彩色图像为例 for i,col in enumerate(color):遍历…

基于MATLAB颜色直方图的图像检索

基于颜色直方图的图像检索 概述 在过去的十几年间,有许多知名机构都对图像检索系统进行了深入的研究,病开发出了相应的检索系统,例如IBM Almaden研究中心研制的QBIC系统,Virage公司研发的VIRAGE系统,麻省理工大学多媒体…

pyimagesearch-4 聪明的女孩:计算机视觉和图像搜索引擎使用颜色直方图的指南

原文链接 It’s…it’s a histogram. – Dr. Grant 好吧,也许这不是确切的引用。但是,如果格兰特博士知道颜色直方图的力量,我认为他会同样激动。 更重要的是,当电力耗尽时,直方图不会让游客吃东西。 那么&#xff…

OpenCV 学习笔记(颜色直方图计算 calcHist)

OpenCV 学习笔记(颜色直方图计算 calcHist) 最近在看一本OpenCV 的书,书名是 《OpenCV 3 Computer Vision Application Programming Cookbook (third edition)》,里面给了很多很实用的代码片段。最近这几篇…

Opencv绘制HSV颜色直方图

一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHistogram 以及函数: cvCalcHist CvCreateHist cvGetMinMaxHistValue cv…

基于颜色直方图优化的图像增强方法

最近改图像颜色迁移的论文,审稿人要求补充基于直方图优化的方法细节。趁此机会,我重新下载了相关文献,决定重新学习下该类方法,并把一些细节记录在本篇博客中,供交流学习。 目录 1. 前言 2. 背景知识 3. 颜色变换 4. 颜…

[OpenCV实战]52 在OpenCV中使用颜色直方图

颜色直方图是一种常见的图像特征,顾名思义颜色直方图就是用来反映图像颜色组成分布的直方图。颜色直方图的横轴表示像素值或像素值范围,纵轴表示该像素值范围内像素点的个数或出现频率。颜色直方图属于计算机视觉中的基础概念,其常常被应用于…

关于颜色直方图

一、颜色距 转自:https://blog.csdn.net/jaych/article/details/51137341 1、颜色距离 颜色距离指的是两个颜色之间的差距,通常距离越大,两个颜色相差越大,反之,两个颜色越相近。在计算颜色距离时,有类似…