数仓高频面试 | 数仓为什么要分层
大家好,我是大D呀。
关于数仓分层,在面试过程中几乎是必问的。不过,面试官一般也不会直接考你数仓为什么要分层,而是在你介绍项目时,可能会换一种形式来穿插着问,比如数据链路为什么要这样设计,这些指标为什么不能在一张表里开发。
那么,这个时候你就要结合着自己实际项目,聊一下数仓分层的理论了。为了让回答显得更体系化,可以把数仓分层的原因、有哪些好处以及是如何进行划分的都讲一讲。
反正你不讲,他也不知道你会。
1、数仓分层的原因
首先,你要明白数仓存在的意义是什么?数仓产出的分析指标,理论上在业务系统侧也都能产出,那么还要数仓干什么呢。
数仓的作用就是将企业所有业务系统的数据收集起来,然后再对这些数据集进行分析处理,为决策层和运营部提供数据服务。
但是在分析处理中,由于数据规模和数据量比较大,分析维度有很复杂,放在一起处理,对于开发和运维成本都很大。于是,才有了数仓分层的概念。
2、数仓分层的好处
紧接着,对数仓分层都带来哪些好处展开讲讲,这里要注意一定要分点回答,先别管全面不全面,至少让面试官觉得你的回答很有条理,而不是让他从你含糊的回答中梳理出123来。
-
将复杂问题简单化。将一个复杂的业务加工逻辑拆解成多个步骤来分步完成,每一层只聚焦于某一类问题。当数据出现问题时,通过追溯可以很快定位到问题出现在哪一层,并且只需要对这一层逻辑修复即可。
-
用空间换时间。数据存储持久化,减少重复开发,节省计算资源,提高数据的复用性。比如将稳定且通用的加工逻辑下沉到某一层,下游在使用时可以直接引用,而无须重复计算。
-
清晰数据血缘。将复杂的数据关系梳理成条理清晰的数据模型,建设思路与数据血缘比较清晰,方便协调开发以及问题定位。
这块就多自由发挥一下,把上述3点回答上来,基本分是能拿到了。
比如,还可以多扩展一些,比如屏蔽业务系统影响,提高数据稳定性;对数据权限精细化管控,提升数据安全。
3、数仓该如何分层
数据分层的划分方式或者层次名称在不同公司或者业务线可能不太一样,这块考察更多的是你对分层的理解,哪一层聚焦在解决什么问题以及不解决什么问题,一定要把划分的依据和边界讲清楚。
下面讲一下数仓分层在阿里的划分方式,数据模型分三层:ODS层、CDM层、ADS层。其中,CDM层又可细分为DWD层、DIM层、DWS层。
1、ODS层(贴源层)
数据源是业务数据库,每天的抽取方式可以通过Canal监听Mysql的Binlog日志的方式,将业务系统数据几乎无处理地回放同步到数据仓库中,结构上与系统侧保持一致。这一层要解决的问题是屏蔽系统侧影响,为后续数仓建设提供业务过程中最原始最细粒度的基础数据。
2、CDM层(公共维度模型层)
DWD层(明细层)
这一层是对ODS层进行剔除脏数据、统一单位、规范注释等处理,提供干净和标准的数据。同时,为了提高明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提供明细数据表的易用性。
比如,对于订单这样量级很大的维度,没有必要用一张维度表来存储,就可以将订单ID的订单类型、下单渠道等维度属性冗余到事实表中。但是也要考虑实际业务场景,对于不稳定的维度(比如商品类目)建议不要做退化,否则会带来很大的刷数成本。
DIM层(维度层)
维度是衡量和观察业务的角度,这层基于维度建模理论,建立整个企业或者业务线上的一致性维度建,降低数据计算口径和算法不统一的风险。
DWS层(汇总数据层)
这层一般根据维度数据和明细数据加工生产的,基于一些分析场景、分析实体,对DWD层数据按照各类维度进行粗粒度地汇总聚合,采用更多的宽表化手段物化模型,构建公共指标数据层,提升公共指标的复用性,减少重复加工。
ADS层(应用层)
这层存放数据产品个性化的统计指标(指数型、比值型、排名型)数据,作为产品特有的个性化指标一班不对外提供数据服务。
4、层次调用规范
对数仓分层中模型和数据的流向规范说明一下。
- ODS层只能被DWD层调用;
- DWD层可以被DWS层和ADS层调用;
- DWS层只能被ADS层调用。
数据调用服务优先使用CDM公共层数据,当公共层没有数据时,需要评估是否需要创建公共层数据,当不需要建设时,方可直接使用ODS层数据。
5、思考
面试中一定要突显出自己对建模理论和应用实践过程的思考,回答出以上理论只是及格分,和其他候选人的区别一定是体现在自己的个人思考之上的。
无论是数仓分层原则还是层次调用规范,都要结合具体的业务场景和业务特点进行建设,不要为了分层而分层,也不要束缚于各种规范。
如果你搭建的数仓模型都是按照规范来的,没有反规范的特殊处理,只能说明做的不够深入,换做同阶或低阶的同学也能做出来,就体现不出其复杂度和模糊度了。
所以,在回答该问题时,一定要结合着实际操练的项目,对遇到的困难和挑战点,把如何通过规范或者反规范的方式解决的过程和思考讲出来,才能获得加分项,更能突显自己。
相关文章:
数仓高频面试 | 数仓为什么要分层
大家好,我是大D呀。 关于数仓分层,在面试过程中几乎是必问的。不过,面试官一般也不会直接考你数仓为什么要分层,而是在你介绍项目时,可能会换一种形式来穿插着问,比如数据链路为什么要这样设计,…...
网络安全—部署CA证书服务器
网络拓扑 两台服务器在同一网段即可,即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认,安装了证书系统后我们是不能随意更改计算机名字的,因为以后颁发的证书都是和计算机也就是这一台的服务器名字有关。 修改完成后开…...
MATLAB中circshift函数的原理分析——psf2otf函数的核心
之所以讲到MATLAB中circshift函数,也是源于Rafael Gonzalez的这个图,作为前几篇答廖老师问的blog的基础。 Rafael Gonzalez的这个图无论从哪幅图到哪幅图都不是直接的傅里叶变换或傅里叶逆变换,需要循环移位,即circshift函数。 这…...
js 惰性函数
惰性函数 是一种优化技术,主要用于避免重复判断和计算。它在第一次调用时确定最终的执行逻辑,并将其替换为适当的函数实现,从而在后续调用中跳过不必要的判断或初始化。 惰性函数的核心思想 第一次调用时执行初始化逻辑,并根据环…...
智能技术引领未来:自动图像标注的创新应用与发展
🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法原理核心逻辑效果演示使用方式参考文献 参考文献:需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获…...
深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式
数据库 深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式一、SQLite 数据库全方位解析(一)创建与基本操作(二)数据存储与表结构设计(三)数据操作:增删改查(四)与 C 语言联合使用(五)防止 SQL 注入二、Redis 数据库深度剖析(一)数据存储类型与独特结构(…...
内网是如何访问到互联网的(华为源NAT)
私网地址如何能够访问到公网的? 在上一篇中,我们用任意一个内网的终端都能访问到百度的服务器,但是这是我们在互联网设备上面做了回程路由才实现的,在实际中,之前也说过运营商是不会写任何路由过来的,那对于…...
华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)
华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理,我们需要统一把局域网内的所有AP上线到AC,由AC做集中式管理部署。这里我们需要理解CAPWAP协议,该协议分为两种报文:1、管理报文 2、数据报文。管理报文实际在抓包过程…...
奖励模池化
奖励模池化 奖励模型概述 奖励模型(Reward Model)在机器学习,特别是强化学习领域中被广泛使用。它的主要作用是**对智能体(Agent)的行为进行评估并给予奖励。**例如,在训练一个机器人执行任务时,当机器人的动作符合预期目标(如成功抓取物品、按照正确路线行走等),奖励…...
基于django协同过滤的音乐推荐系统的设计与实现
一、摘要 随着现代音乐的快速发展,协同过滤的音乐推荐系统已成为人们业余生活的需求。该平台采用Python技术和django搭建系统框架,后台使用MySQL数据库进行信息管理;通过用户管理、音乐分类管理、音乐信息管理、歌曲数据管理、系统管理、我的…...
Tiptap,: 富文本编辑器入门与案例分析
Tiptap 是一个现代的富文本编辑器,基于 ProseMirror 打造,旨在提供一个灵活且功能强大的文本编辑解决方案。它具有开箱即用的能力,同时也允许开发者根据业务需求进行高度定制化扩展。与传统的富文本编辑器相比,Tiptap 提供了更精细…...
使用Linux的logrotate工具切割日志:Tomcat、NGINX(journal文件清理)
文章目录 引言I Tomcat日志切割配置轮转参数验证码II NGINX访问文件的配置和切割access.log 访问日志的配置使用Linux的logrotate工具切割日志验证文件切割III /run/log/journaljournalctl文件清理引言 journal文件清理: 只保留过去两天,清理之前的文件 journalctl --vacuu…...
CSS系列(11)-- 滤镜与混合模式详解
前端技术探索系列:CSS 滤镜与混合模式详解 🎨 致读者:探索视觉效果的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 滤镜与混合模式,学习如何创建独特的视觉效果。 滤镜效果详解 🚀 基础滤…...
linux - 存储管理
1.了解硬件 -- 磁盘 硬盘有机械硬盘(HDD)和固态硬盘(SDD) 接下来,主要以机械磁盘为例(更具代表性,在linux系统层面,无论是机械磁盘还是固态硬盘,文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块) 1.盘片&#x…...
在 Kibana 中为 Vega Sankey 可视化添加过滤功能
作者:来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗?了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中,我们将了解如何启用 Vega Sankey 可视…...
styled-components 库的用法介绍和实践总结
styled-components 库的实践用法总结 前言 前段时间开发了一个 NiceTab 浏览器插件,并写了一篇介绍文章,新开发了一款浏览器Tab管理插件,OneTab 的升级替代品, 欢迎品尝!。 在插件中用到了 styled-components 这个库,于是做一个基本的介绍和分享。 在开发 NiceTab 插件…...
SSE(Server-Sent Events)主动推送消息
说明 使用Java开发web应用,大多数时候我们提供的接口返回数据都是一次性完整返回。有些时候,我们也需要提供流式接口持续写出数据,以下提供一种简单的方式。 SSE(Server-Sent Events) SSE 是一种允许服务器单向发送事…...
pandas.core.frame.DataFrame怎么进行对象内容的读写
在 Python 中,pandas.core.frame.DataFrame 是 Pandas 数据库的核心数据结构,可以方便地读取和操作表格数据。以下是几种常见的读取内容的方法: 读取特定列 通过列名获取数据。 # 假设 df 是一个 DataFrame data df["列名"] # …...
短作业优先调度算法
一、实验目的 了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。 二、实验内容 模拟实现SJF调度。 设置作业体:作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运行,F——完成)…...
SpringBoot 应用并发处理请求数的深入解析
SpringBoot 应用并发处理请求数的深入解析 一、引言 在现代Web开发中,了解一个应用程序可以同时处理多少个并发请求是至关重要的。 对于基于Spring Boot构建的应用程序来说,这个问题的答案并非绝对,而是取决于多个因素,包括但不…...
MetaGPT中的教程助手:TutorialAssistant
1. 提示词 COMMON_PROMPT """ You are now a seasoned technical professional in the field of the internet. We need you to write a technical tutorial with the topic "{topic}". """DIRECTORY_PROMPT (COMMON_PROMPT "…...
介绍一款docker ui 管理工具
http://vm01:18999/main.html 管理员登陆账号 jinghan/123456 ui启动命令所在文件夹目录 /work/docker/docker-ui 参考链接 DockerUI:一款功能强大的中文Docker可视化管理工具_docker ui-CSDN博客...
0022 基于SpringBoot的婚纱摄影线上预约系统的设计与实现
电子商城系统 1.项目描述2. 绪论2.1 研究背景2.2 目的及意义2.3 国内外研究现状 3.需求分析4.界面展示5.源码获取 1.项目描述 摘 要 本文旨在研究并开发一套基于Spring Boot框架的婚纱摄影线上预约系统,以满足现代婚纱摄影行业对高效、便捷、个性化服务的需求。该系…...
uni-app在image上绘制点位并回显
在 Uni-app 中绘制多边形可以通过使用 Canvas API 来实现。Uni-app 是一个使用 Vue.js 开发所有前端应用的框架,同时支持编译为 H5、小程序等多个平台。由于 Canvas 是 H5 和小程序中都支持的 API,所以通过 Canvas 绘制多边形是一个比较通用的方法。 1.…...
Comparator.comparing 排序注意
1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 (正确的排序方法)//倒…...
PPO系列3 - PPO原理
On Policy: 采集数据的模型,和训练的模型,是同一个。缺点:慢,生成一批样本数据,训练一次,又要重新生成下一批。 Off Policy: 采集数据的模型,和训练的模型,不是同一个。有点…...
.idea
.idea/ 文件夹下的文件和目录主要用于存储 JetBrains IDE(如 PyCharm、IntelliJ IDEA 等)的项目配置。下面是一些常见文件和目录及其作用的详细介绍: 1. workspace.xml 用户界面布局:保存了IDE窗口布局,包括打开的文…...
单片机:实现呼吸灯(附带源码)
单片机实现呼吸灯详细解读 呼吸灯是一种常见的灯光效果,广泛应用于电子产品、汽车、家居照明等领域。其基本特性是通过逐渐增亮和减弱的方式,使得灯光呈现出“呼吸”的效果,给人一种平缓、舒适的视觉感受。在嵌入式系统中,呼吸灯…...
PostgreSQL数据库序列信息查询
PostgreSQL序列信息查询 说明: 在PostgreSQL数据库中序列和表都是序列的对象。 数据库中不应该存在孤儿序列,序列应该和表对应的字段绑定起来。绑定后删除表或表对应的字段后,序列会自动被删除。 创建测试表和序列 create table test_t(…...
【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】
👨🎓博主简介 🏅CSDN博客专家 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入!…...
南京网站网站建设公司/外贸推广具体是做什么
HttpClient 创建客户端:HttpClients .execute(请求类型对象)发起请求 请求类型:HttpGet/HttpPost get携带参数:new URIBuilder(“网址”) .setParameter(“key”,“value”) -》new HttpGet(uriBuilder.build())post携带参数:n…...
口腔网站建设/关键词全网搜索工具
pygame 文字绘制机制文字绘制机制文字绘制系统中的字体Font类Font类的绘制方法1Font类的绘制方法2文字绘制机制 文字绘制 pygame.freetype向屏幕上绘制特定字体的文字 文字不能直接print() ,而是用像素根据字体点阵图绘制 pygame.freetype是绘制文字的增强方法&…...
济南网站改版/网站怎么做优化排名
2019独角兽企业重金招聘Python工程师标准>>> 并发编程:可以充分利用多核CPU的处理能力,提升系统的处理效率和并发性能。 1、Reactor模型 基于事件驱动(异步非阻塞IO),特别适合处理海量的I/O事件。 1.1、单线…...
建设银行网站 个人客户端/必应bing搜索引擎
http://mobileangularui.com/ http://ionicframework.com/ http://www.idangero.us/framework7/ (中文文档:http://framework7.taobao.org/) http://amazeui.org/转载于:https://www.cnblogs.com/redfire/p/7702299.html...
30人的网站建设公司年利润是多少/推广普通话手抄报
Matlab期末复习2008.06.04第 1章 MATLAB语言概述第 2章 基本语法第 4章 Matlab的其它函数库第 6章 Matlab在信号与系统中的应用第 9章 Matlab工具箱简介第 1章 MATLAB语言概述了解 MATLAB的基本知识熟悉 MATLAB的上机环境Matlab的工作环境1、命令窗2、图形窗3、文本编辑窗ESC键…...
查看网站建设时间/怎么制作网站教程手机
原因 今天下午在抓取一个网页时,发现的网页字体反爬,这种情况一句话总结:即网页文本里的数字与网页上显示的字体不一致。为什么会出现这样的情况呢?原因是开发者在网页文本里引入了改变字体的文件。 然后可以看到,这…...