数据仓库—维度建模—事实表设计

事实表

事实表是数据仓库中的核心表,用于记录与业务过程相关的事实信息,是进行数据分析和挖掘的主要数据来源。

在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件,所以事实表本质上是反映一个个事件的,例如下单事件,度量就是下单的金额,事实表的特点就是增长迅速,且主要以数值进行记录,或者是以其他信息进行记录

这里补充一下,其实一个操作事件往往有多个维度,举个例子,下单操作有下单行为的主体也就是用户,下单的对象也就是商品,还有下单的时间等,这些都是不同的维度表

在构建数据仓库总线矩阵完成后,可着手事实表和维度表的设计,关于总线矩阵可以参考数仓建模—总线矩阵

数仓总线矩阵里每个业务过程都会生成至少一张事实表(识别业务过程的本质就是识别要构建的事实表),因为有可能一个原子事件涉及多张表的情况。同时,因上游业务系统老旧,表设计水平、使用场景等因素,或并不是都是标准3NF范式设计,将多个业务过程事件发生存储在一张表的情况,对于此种情况做事实表设计时,根据使用场景可能会进行表拆分考虑。

  1. 对于单事务事实表,一个业务过程建立一个事实表,只反映一个业务过程的事实;

  2. 对于多事务事实表,在同一个事实表中反映多个业务过程。

  3. 还有一种就是一个业务过程有多个事实表

多个业务过程是否放到同一个事实表中,首先需要分析不同业务过程之间的相似性和业务源系统。还会考虑使用场景、数据共同项、数据产出时效、数据逻辑变动频率、数据量、数据安全性等因素,再决定是否适合放到同一个事务事实表中。

事实表设计是需识别业务过程、探查数据粒度、维度、事实等几个步骤,再根据数据粒度,数据更新方式、数据量大小和使用场景等因素判断是否进行多业务过程或表进行合并,再选择合适的事实表类型进行模型设计

数据同步方式

在进行表设计之前需要进行数据探查,如数据粒度、字段是否在使用、字段是否为空、记录是否完整、数据更新方式,即粒度更新方式,所谓粒度,就是表中一行记录代表什么,即一个主体何时何地为何发生了什么事件。再根据数据量大小、不同粒度更新方式,可分为以下三种增量、全量和合并数据同步方式:

  • 增量:流水表只追加,记录无更新无删除,数据量小可以全量,数据量大一般情况是增量抽取方式(考虑未来数据量的变化)

  • 全量:存在数据记录更新 其实这就是快照事物事实表

  • 合并:存在数据记录删除(合并ETL工具集成可直接使用,不集成抽取后处理也行)

对于无更新无删除记录流水表使用增量、全量都可以,可依据数据量大小来选,因为增量表分区表当成全量表使用,分区条件限定为从历史到当前;对于存在数据记录更新的,可使用全量抽取,否则会导致数据抽取不全或数据存在重复;对于数据记录删除的,需合并之前历史数据,否则会数据丢失,无法反应历史变化的特性。

事实表的度量

  • 可加

可以进行任意维度下的累加

  • 半可加

每个学生的各个科目的成绩是可加的,但是全班的各个科目进行累加是没有意义的

不可加

需要注意不可加的在任何情况下都是不可加的,比例或者比率是只针对该行有意义,直接累加无意义

这个其实是比较常见的一种情况,但是容易被忽略,也就是说不是所有的事实表都是可度量的,也就是记录了数值,例如用户的发言、评论等等。

事实表的设计

在进行事实表设计或进行数仓模型评审是尽量可能将分散在各个业务系统中相同或相似的业务过程进行整合,但也存在这个分拆的设计,例如我们的业务系统的表设计的并不好,将多个业务过程放在了一张表里,这个时候我们可能就需要做拆

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/559316.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】iptables的应用

iptables 防火墙 防火墙是一种网络安全系统,它位于内部网络与外部网络(如互联网)之间,通过实施预定义的安全策略来控制网络间的通信。防火墙的主要目标是保护内部网络资源免受未经授权的访问、攻击或潜在威胁,同时允…

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

VUE的import store from ‘./vuex/store改为‘ import store from ‘./vuex/store.js‘

ERROR Failed to compile with 1 error 下午5:25:40 error in (webpack)-dev-server/client?http://10.18.173.180:8081/sockjs-node Syntax Error: no such file or directory, open D:\4myroom\H…

2024年,新手做抖店千万犯这几点错误,轻则保证金,重则封店!

哈喽~我是电商月月 很多做抖音小店的新手朋友都忽略了违规操作这一部分,交完保证金以为后续不开了保证金还能退回?别天真了! 不了解抖音小店的行为规则,违规了不仅保证金没了,严重的话,店铺都开不下去&am…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(2)——服务端架构

1.架构选型 B/S架构:支持PC、平板、手机等多个平台 2.技术选型 (1)客户端web技术: HTML5 Canvas:支持基于2D平铺的图形引擎 Web workers:允许在不减慢主页UI的情况下初始化大型世界地图。 localStorag…

谷雨,春天的最后一次回眸

人生并不像火车要通过每个站似的经过每一个生活阶段。 今日谷雨,这不是技术文,是码哥的碎碎念 谷雨猕漫着芭蕉的味道动了心成了情白素贞的姻以伞结缘可天若无雨地上无伞断桥未断过客,能留下一段传奇吗?或许难难 倘若在江城边不是西…

盲人购物指南:智能化辅助引领超市购物新体验

作为一名资深记者,我有幸见证了一位盲人朋友借助一款名为蝙蝠避障的高科技辅助应用,独立完成超市购物之旅,这一过程充分展示了盲人购物指南新时代的到来。 在前往超市的路上,这款应用犹如一位贴心的“电子向导”,实时为…

编程范式之函数编程

文章目录 **核心概念****特征****优点****示例语言**案例 函数编程(Functional Programming, FP)是一种编程范式,它强调程序由一系列不可变的值和纯函数(Pure Function)组成,尽量避免副作用(Sid…

Zynq7000系列中PL时钟使用

可编程逻辑(PL)具有自己的时钟管理生成和分配功能,并从处理器系统(PS)中的时钟发生器接收四个时钟信号(如图25-10所示)。 在嵌入式系统中,PL时钟的管理和分配对于确保逻辑电路的正确…

微波炉定时器开关

微波炉火力调节开关及定时器开关内部结构 参考链接: 微波炉火力调节开关及定时器开关判断好坏小经验-百度经验 (baidu.com)https://jingyan.baidu.com/article/5d6edee2d175c399eadeecfd.html微波炉拆解图示,微波炉结构原理,轻松玩转微波炉维…

使用eNSP配置OSPF多区域实验

一、实验拓扑 二、实验要求 1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回&…

HWOD:字符串字符匹配

一、知识点 c语言中,判断一个字符串中是否含有某字符是很容易的,不需要知道字符串的长度 i0; while(c ! str[i] && str[i] ! \0){ i; } if(str[i] \0){ return false; } return true; 二、题目 1、描述 判断短字符串S中的所有字符…

【C++题解】1020. 算算和是多少

问题:1020. 算算和是多少 类型:基本运算、拆位求解 题目描述: 输入一个三位正整数,然后与它倒过来的数相加,输出和。 如:输入167 ,则和为167761928。 输入: 只有一行&#xff0c…

Python数据可视化库—Bokeh与Altair指南

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域,数据可视化是一种强大的工具,可以帮助我们…

Brainpan(VulnHub)

Brainpan 1、nmap 2、web渗透 随便看看 目录爆破 使用不同工具,不同字典进行爆破 9999端口分析 10000端口分析 字符串信息中,提示这个程序不能运行在DOS模式下,然后有32个A,还有一行关于复制字节到缓冲区的信息,还有一…

【吊打面试官系列】Java高并发篇 - 如何停止一个正在运行的线程?

大家好,我是锋哥。今天分享关于 【如何停止一个正在运行的线程?】面试题,希望对大家有帮助; 如何停止一个正在运行的线程? java如何停止一个正在运行的线程? 在Java中,可以使用Thread.stop()方法来停止一…

大语言模型攻击

实验: 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性,以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然,这是一个令人信服的匿名死亡…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击,因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升,改变了网络安全格局。网络管理员必须积极主动地分析网络,获得对网络的完全控制,并全面了解网络流量活…

C++ | Leetcode C++题解之第38题外观数列

题目&#xff1a; 题解&#xff1a; class Solution { public:string countAndSay(int n) {string prev "1";for (int i 2; i < n; i) {string curr "";int start 0;int pos 0;while (pos < prev.size()) {while (pos < prev.size() &&…

vue全屏后下拉框失效

如图&#xff0c;vue页面有个全屏功能 问题&#xff1a;全屏后下拉菜单消失 解决&#xff1a;加个这个 :teleported"false"如果不行试试这个 :popper-append-to-body"false"ok我话说完