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

很多时候,看一些数据领域的文章,说到为什么做数据仓库、数据仓库要分层,我们经常会看到一些结论:因为有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

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

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

相关文章

python3 阿里云api进行巡检发送邮件

python3 脚本爬取阿里云进行巡检 不确定pip能不能安装上,使用时候可以百度一下,脚本是可以使用的,没有问题的 太长时间了,pip安装依赖忘记那些了,使用科大星火询问了下,给了下面的,看看能不能使…

知识注入以对抗大型语言模型(LLM)的幻觉11.6

知识注入以对抗大型语言模型(LLM)的幻觉 摘要1 引言2 问题设置和实验2.1 幻觉2.2 生成响应质量 3 结果和讨论3.1 幻觉3.2 生成响应质量 4 结论和未来工作 摘要 大型语言模型(LLM)内容生成的一个缺点是产生幻觉,即在输…

WPF中的Binding的常见知识点与技巧

完全来源于十月的寒流,感谢大佬讲解 在XAML中,可以绑定到许多不同类型的数据源和属性。以下是一些可以绑定的常见数据源和属性: 属性:可以绑定到对象的属性,例如控件的Text、Visibility、IsEnabled等属性。 集合&am…

linux内的循环

格式 while 【 条件判断 】 do 语句体 done 上图 第一次代码,输入语句在外面,结果输入完(非hello)程序不断循环,没办法,ctrlc给程序终止了,然后把用户输入的语句放到了循环体里面…

vivo发布“蓝心千询”自然语言对话机器人

🦉 AI新闻 🚀 vivo发布“蓝心千询”自然语言对话机器人 摘要:vivo今日发布了“蓝心千询”自然语言对话机器人,基于蓝心大模型。蓝心千询可以进行知识信息的快速问答,文学创作、图片生成,甚至还能编写程序…

SAM 微调在医学上的尝试

1、2023下半年 1、 UNet与SAM结合的正确的道路SAMUS,一路SOTA没对手! https://github.com/xianlin7/SAMUS 2、 本文提出 SonoSAM:一种用于分割超声图像上感兴趣对象的快速基础模型。 https://zhuanlan.zhihu.com/p/663988684 未开源 绿色是预测的&…

流媒体服务实现H5实时预览视频

目录 背景方案业务实践细节注意 待办 背景 客户aws服务磁盘存储告急,最高可扩容16T。排查如下:主要是视频文件存在大量复制使用的情况。例如发布节目时复制、预览时复制,这样上传一份视频后最大会有四份拷贝(预览、普通发布、互动…

http中的Content-Type类型

浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流,需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢?他们具体的使用场…

作用域,基本数据类型(常量const),转义字符,运算符

1.作用域 全局作用域:定义在所有花括号外的名字具有“全局作用域” 块作用域:在某个花括号内定义的名字具有“块作用域” 一般把具有全局作用域的变量叫做“全局变量”,具有块作用域的变量叫做“局部变量” 如果在嵌套作用域里出现重名&a…

Linux进程的优先级

Linux进程的优先级 📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解Linux中进程的优先级&#xff0…

视频集中存储/云存储EasyCVR启动后查询端口是否被占用出错,该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项

介绍linq to sql 的 DataContext类DeferredLoadingEnabled属性使用,以及DataLoadOptions限定加载相关表数据的LoadWith和AssociateWith方法。 本文中举例用到的数据模型如下: Student和Class之间是多对一关系,Student和Course之间是多对多关系。 DataContext的DeferredLo…

策略模式在数据接收和发送场景的应用

在本篇文章中,我们介绍了策略模式,并在数据接收和发送场景中使用了策略模式。 背景 在最近项目中,需要与外部系统进行数据交互,刚开始交互的系统较为单一,刚开始设计方案时打算使用了if else 进行判断: if(…

宝塔面板使用Supervisor进程守护插件,配置守护Mysql的操作教程。

本篇文章主要讲解,在宝塔面板中使用Supervisor进程守护插件,配置守护Mysql的操作教程。 作者:任聪聪 日期:2023年11月5日 一、安装守护进程插件 安装插件一、进程守护插件 安装说明:在软件商店中搜索“进程守护”&am…

elasticsearch下载和安装(linux)看这一篇就够了

配置java环境(11版本以上) 1.下载安装包 我是放在usr下的java里了 2.解压 tar -zxvf jdk-17_linux-x64_bin.tar.gz3.配置环境变量 vim /etc/profile在文件的最下面添加 JAVA_HOME/usr/java/jdk-17.0.9 #你自己的安装路径 JRE_HOME$JAVA_HOME/jre C…

项目实战:组件扫描实现(1)-扫描类路径所有文件

1、ComponentScan 组件扫描类 一下知识本人都是在Maven工程下总结的,所以目录结构会不一样这个类的作用是扫描所有的classes目录下的所有的字节码文件,找到相应的类,然后找到相应类上的注解 package com.csdn.mymvc.core; import java.io.Fi…

6.数据类型与运算符

目录 mysql数据类型 整型数据类型 浮点数类型和定点数类型 1、日期时间类型 1、YEAR 2、TIME 3、DATE类型 4、DATETIME 5、TIMESTAMP 2、字符串类型 1、CHAR 和 VARCHAR类型: 2、TEXT类型 3、ENUM类型 4、SET类型 二进制字符串类型 1、BIT类型 2、…

链表面试OJ题(1)

今天讲解两道链表OJ题目。 1.链表的中间节点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个…

iOS17.2正式版什么时候发布? 13大新功能细节抢先看

苹果已经发布了针对开发者的iOS 17.2 Beta测试版,而iOS 17.2正式版预计会在2023年12月发,新版本给iPhone带来不少新功能,下面小编就带大家抢先了解iOS 17.2即将带来的13个新功能亮点细节。 1.手记Journal App上线 全新「手记」 Journal App终…

访问控制、RBAC和ABAC模型

访问控制、RBAC和ABAC模型 访问控制 访问控制的目的是保护对象(数据、服务、可执行应用该程序、网络设备或其他类型的信息技术)不受未经授权的操作的影响。操作包括:发现、读取、创建、编辑、删除和执行等。 为实现访问控制, 计…