数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

news2024/10/7 15:19:38

很多时候,看一些数据领域的文章,说到为什么做数据仓库、数据仓库要分层,我们经常会看到一些结论:因为有ABCD…等等理由,比如降低开发成本、减少重复计算等等好处

然后,多数人就记住了ABCD。但是,每每被问起来,为什么,有什么案例,你是怎么理解的,就被问住,傻眼了。

概念套概念,没意思,不如返璞归真,从生活案例重新理解起~

01 从统计班级人数开始

本文将用生活化案例,结合粒度的概念,帮你理解常说的减少重复计算。

假如,你带一个班级,你是班主任,你上第一节课。但你不知道班上到了多少人,于是,让同学们报数,班上有 30 人,从 1 报到 30,每个人报一次数,一共30 次。

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

第二节课,来了科任老师 A, 他也想知道班级人数,于是也让同学们报数,从1 报到 30,又是 30 次。

第三节课,来了科任老师 B,他也想知道人数,于是…

第四节课,来了科任老师 C,他也想… 好,一次又一次地报数,同学们烦了。于是有个聪明人记录下来,写到黑板上。

第五节课,等到科任老师 E 面带微笑地走进教室,问班里一共多少人,笑着说,同学们,要不我们来报数吧?

孩子们异口同声地对老师说:老师,请看黑板!

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

你看,把结果记录和存储下来,就不用再从 1 报到 30才能知道结果了

这就是减少重复计算了!

02 思考思考粒度

我们再看看粒度。

关于粒度,我曾在数据仓库的文章里讲过,可以回看下:数仓避坑-整明白懂粒度

按照报数规则,一个人只能往另一个人的报数上加一,班级人数这个数字每加一,背后对应的就是一个新的人。

人不可再分,最小就是1,不存在0.5个人,班级人数这个数字的最小粒度,就是人。

粗一点的粒度是什么?以班级为粒度单位报人数,可以只用报一次。

粒度还可以是组,班级里面,我们可以按照不同的方式给同学们分成不同的组。常见的,按照列分组。

其实,这种分组,是按照同学们所坐位置的物理空间来划分的。

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

我们还可以划分其他的组,比如,按照出生月份,住的小区,兴趣爱好,等等进行分组。

当我们想知道,某个组有多少人,并不需要每次都从最小粒度去统计人数,都去报数,我们都可以把组,这个相对人来说,更粗的粒度的数字统计出来,记录下来, 下次再有类似的提问/请求,直接拿粗粒度的统计结果,也就是直接回答,这个组有多少人。

这就是,减少重复计算的生活化案例,是不是比构建指标体系、搭建中台、减少重复开发、重复计算,要具象多啦~

03当问题开始复杂,分层的好处出现

刚刚,我们解决了班级粒度的事情,现在,你是校长了。

你的管理范围变大了,至少,统计人数,你先核心是关注更大层面的统计数据,比如全校人数,各年级人数,然后当有一些班级人数分配不均匀的时候,再细致看某个班的人数。

有了班级、年级人数,那么全校人数就好办啦~层层往上汇总累加就好了,总不至于全校开大会,从头报到尾吧。

管理的场景,问题是多如牛毛的,不同场景,所需要的统计数据、分组,都不尽相同。

在招生期间,你要知道每个学区给定的学生名额数,还有一些特长生的名额;

在日常管理期间,你要知道不同年级学生出勤、上课的情况。

更重要的是,你得了解学生的成绩情况。不同年级、不同学科、不同类型的学生,绝对分数,分数的变化趋势。

虽然咱们搞素质教育,不对外暴露这些信息,避免攀比和比较,但是最终落到学校的升学人数、升学率的时候,这些过程性的数据又是我们不得不关注的。

所谓的分层,是分而治之,分而算之。

光讲好处,问题就没有了吗?肯定是有的,比如,我们要额外地记录一些数据,要保证这些分而算的数据的准确性,相当于是信任这个分层数据的提供者。

整个过程中,还要从分析的角度出发,去设计很多分层里面的相关维度、共性维度。关于维度,可以看这篇:数仓避坑-想清楚维度

04 企业里的重复计算

回到企业的环境里,我们会对用户的观看图片、看视频、看直播的行为事件进行统计、计数,看了几次,看了多长时间。

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

我们也非常关心用户看完这些,到底花了多少钱,送了多少个礼物,买了多少直播间里的商品

我们会从各种角度对这些过程行为、消费结果进行拆解和统计。

于是乎,企业里会有非常多需要统计、计数的数据。

比如,埋点会上报某个用户在某市某刻观看了A视频,用的手机是苹果,操作系统的版本是IOS7.x,用户所在的IP解析出来是在一线城市。

观看完之后,进入到了讲某个商品的直播间B,系统也会记录,在直播间B下单购买了商品C,金额是99,购买的个数是4个。

当我们要去统计,一线城市的用户观看A图片的次数,购买商品C的数量和金额的时候。

我们会跟之前统计班级人数、分组人数一样,要统计这些结果。

我们可以提前把一些结果提前记录下来,然后每次其他人要查询相同信息的时候,就不用每次都要「报数」了~

比如,今年小米发的双十一战报。

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

可能很多人都想要这个结果,用于宣传或者分析,那我们直接把这个数据存下来,当别人要的时候,直接拿出来就好了(图片里面,还备注了数据的统计口径)

具体的一些后台报表,我就不去举例了,大家体会到重复计算到底是怎么回事,就可以了。

关于这些数据是怎么存储的,可以了解数据仓库维度模型:数仓避坑-搞懂维度模型

END

结合生活案例,去剖析拆解每一个你从他人那里听来的、借鉴来的、但其实自己并不了解的抽象词,这样就是真的吃透了~

以上,感谢阅读~

欢迎点赞、收藏、转发!

也欢迎关注我的公众号:数据产品小lee

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VScode连接Xshell 并解决【过程试图写入的管道不存在】报错

一.下载vscode 国内镜像: https://vscode.cdn.azure.cn/stable/6c3e3dba23e8fadc360aed75ce363ba185c49794/VSCodeUserSetup-x64-1.81.1.exe二.打开vscode在扩展搜索SSH并安装 三.添加主机 按F1选择添加新的ssh主机 按格式输入后在左边会出现电视的图标 之后输入…

十一、K8S之持久化存储

持久化存储 一、概念 在K8S中,数据持久化可以让容器在重新调度、重启或者迁移时保留其数据,并且确保数据的可靠性和持久性。 持久化存储通常用于程序的状态数据、数据库文件、日志文件等需要在容器生命周期之外的数据,它可以通过各种存储解…

项目管理之如何监控项目健康状态

项目管理是一个复杂且关键的过程,涉及到多个关键因素,包括项目名称、项目管理委员会成员、项目经理、项目生命周期的各个阶段以及资源泳道等。如何有效地监控项目的健康状态是确保项目成功的重要环节。本文将详细介绍项目管理全景图及其在风险识别中的应…

【差旅游记】公乌素遇到的那些司机师傅

哈喽,大家好,我是雷工! 出差人出差在外,城际间靠各种公共交通工具,但到了目的地的城镇,最后一公里往往少不了打车,或出租车,或摩的三轮车。 不同于公共交通,像飞机火车高…

【C++类和对象中:解锁面向对象编程的奇妙世界】

【本节目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 赋值运算符重载 6. const成员函数 7. 取地址及const取地址操作符重载 1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗&#xf…

ConvNets 与 Vision Transformers:数学深入探讨

一、说明 我目睹了关于 Vision Transformer 的争论,讨论它们如何与 CNN 一样好或更好。我想知道我们是否也同样争论菠萝比西瓜好!或者马比海豚更好?其中许多讨论往往缺乏具体性,有时可能会歪曲上下文。 作为背景,在快速…

计算机基础知识44

overflow溢出属性 visible:默认值,内容不会被修剪,会呈现在元素框之外。hidden:内容会被修剪,并且其余内容是不可见的。scroll:内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。auto: …

GEE错误——XXX is not a function,如何解决这个问题?

错误: 这里的时错误原始的代码链接: https://code.earthengine.google.com/4bf0975a41e14d0c40e01925c6f3cf2a 这里主要的问题时这个单一影像不存在: ImageCollection (Error) ImageCollection.load: ImageCollection asset LANDSAT/LC08/C01/T1_SR/LC08_221077_201704…

self.register_buffer方法使用解析(pytorch)

self.register_buffer就是pytorch框架用来保存不更新参数的方法。 列子如下: self.register_buffer("position_emb", torch.randn((5, 3)))第一个参数position_emb传入一个字符串,表示这组参数的名字,第二个就是tensor形式的参数…

微信Wxid转换微信号

微信号在申请的时候,系统随机分配了一个微信原始ID,该ID号以wxid_开头,后面是随机的字符串 分配的原始ID是目前是不可以直接用来加好友的,需要转换成微信号才能加好友, 经过逆向分析通过PC端找到了该接口并且可以成功用…

Langchain知识点(下)

背景: 这部分给主要介绍Langchain的agent部分,前面已经章节已经介绍了思维和思路作为一种数据资产是这一次LLM数据化的核心。也介绍了各种的chain,那么既然有了chain可以把专家思路和专家思维固化并且可被方便的共享和利用;那为什…

数据结构-链表的简单操作实现

目录 0.链表前序工作 1.构建出一个链表 2.展示链表中的所有存储数据 3.查找关键字key是否在链表中 4.求链表的长度 5.头插法 6.尾插法 7.插入任意位置(规定第一个元素位置为0下标) 8.删除第一次出现的值为key的关键字 9.删除所有值为key的关键字…

【算法】通信线路(二分,堆优化版dijkstra)

题目 在郊区有 N 座通信基站,P 条 双向 电缆,第 i 条电缆连接基站 Ai 和 Bi。 特别地,1 号基站是通信公司的总站,N 号基站位于一座农场中。 现在,农场主希望对通信线路进行升级,其中升级第 i 条电缆需要花费…

Tensor.scatter_add_函数解释:

Tensor.scatter_add_(dim, index, src) → Tensor out.scatter_add_(dim, index, src) 1.参数: dim (int) – 哪一dim进行操作 index (LongTensor) – 要在的out的哪一index进行操作 src (Tensor) – 待操作的源数字 2.官方的解释的操作如下: 3.例…

基于8086汽车智能小车控制系统

**单片机设计介绍,基于8086汽车智能小车控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于 8086 的汽车智能小车控制系统是一种将微处理器技术应用于汽车控制的系统。下面是其主要的设计介绍: 硬…

ubuntu22.04桌面版系统无法识别USB摄像头

虚拟机连接电脑摄像头连接失败(驱动程序错误) 本文为转载:版权归远作者所有,之所以转载是为了避免被原作者删除 巴黎铁塔下的女孩 你尽管努力,剩下的交给时间 虚拟机调用电脑的摄像头,正常情况下只需点击…

方案分享:F5机器人防御助企业应对复杂攻击

企业是Bot攻击者的目标,网络犯罪分子会不断调整他们的攻击,来攻破愈发成熟的Bot防护,这使企业安全团队时刻处于紧张状态。如果不能有效地管理Bot,应用性能、客户体验和业务都会被影响,但在尝试阻止这些攻击时&#xff…

技术分享 | web自动化测试-文件上传与弹框处理

实战演示 文件上传 input 标签使用自动化上传,先定位到上传按钮,然后 send_keys 把路径作为值给传进去. 如图所示,是企业微信文件上传的页面 定位到标签为 input,type 为 file 的元素信息,然后使用 send_keys 把文件…

Harbor企业级Registry基础镜像仓库的详细安装使用教程(保姆级)

Harbor Docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是vmware一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。 ha…

原语:串并转换器

串并转换器OSERDESE2 可被Select IO IP核调用。 OSERDESE2允许DDR功能 参考: FPGA原语学习与整理第二弹,OSERDESE2串并转换器 - 知乎 (zhihu.com) 正点原子。 ISERDESE2原语和OSERDESE2原语是串并转换器,他的的功能都是实现串行数据和并行…