数仓高频面试 | 数仓为什么要分层

news2024/12/14 10:21:50

大家好,我是大D呀。

关于数仓分层,在面试过程中几乎是必问的。不过,面试官一般也不会直接考你数仓为什么要分层,而是在你介绍项目时,可能会换一种形式来穿插着问,比如数据链路为什么要这样设计,这些指标为什么不能在一张表里开发。

那么,这个时候你就要结合着自己实际项目,聊一下数仓分层的理论了。为了让回答显得更体系化,可以把数仓分层的原因、有哪些好处以及是如何进行划分的都讲一讲。

反正你不讲,他也不知道你会。

1、数仓分层的原因

首先,你要明白数仓存在的意义是什么?数仓产出的分析指标,理论上在业务系统侧也都能产出,那么还要数仓干什么呢。

数仓的作用就是将企业所有业务系统的数据收集起来,然后再对这些数据集进行分析处理,为决策层和运营部提供数据服务。

但是在分析处理中,由于数据规模和数据量比较大,分析维度有很复杂,放在一起处理,对于开发和运维成本都很大。于是,才有了数仓分层的概念。

2、数仓分层的好处

紧接着,对数仓分层都带来哪些好处展开讲讲,这里要注意一定要分点回答,先别管全面不全面,至少让面试官觉得你的回答很有条理,而不是让他从你含糊的回答中梳理出123来。

  1. 将复杂问题简单化。将一个复杂的业务加工逻辑拆解成多个步骤来分步完成,每一层只聚焦于某一类问题。当数据出现问题时,通过追溯可以很快定位到问题出现在哪一层,并且只需要对这一层逻辑修复即可。

  2. 用空间换时间。数据存储持久化,减少重复开发,节省计算资源,提高数据的复用性。比如将稳定且通用的加工逻辑下沉到某一层,下游在使用时可以直接引用,而无须重复计算。

  3. 清晰数据血缘。将复杂的数据关系梳理成条理清晰的数据模型,建设思路与数据血缘比较清晰,方便协调开发以及问题定位。

这块就多自由发挥一下,把上述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、思考

面试中一定要突显出自己对建模理论和应用实践过程的思考,回答出以上理论只是及格分,和其他候选人的区别一定是体现在自己的个人思考之上的。

无论是数仓分层原则还是层次调用规范,都要结合具体的业务场景和业务特点进行建设,不要为了分层而分层,也不要束缚于各种规范。

如果你搭建的数仓模型都是按照规范来的,没有反规范的特殊处理,只能说明做的不够深入,换做同阶或低阶的同学也能做出来,就体现不出其复杂度和模糊度了。

所以,在回答该问题时,一定要结合着实际操练的项目,对遇到的困难和挑战点,把如何通过规范或者反规范的方式解决的过程和思考讲出来,才能获得加分项,更能突显自己。

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

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

相关文章

常回家看看之Tcache Stashing Unlink Attack

前言: 在开始了解这个攻击手法的前提,需要先了解一个函数也就是calloc函数,众所周知,当libc版本大于等于2.27的时候会引入tcachebin,而Tcache Stashing Unlink Attack就是发生在2.27版本以上,那么这个和ca…

心情追忆- SEO优化提升用户发现率

之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署。经过一个月的努力,通过群聊分享等方式,用…

深入探索:createThread与cancelThread的用法及实例

在多线程编程领域,线程的创建与管理是核心技能之一。本文将详细介绍两个关键函数:createThread(用于创建新线程)和cancelThread(用于取消已存在的线程),并通过具体实例展示它们的用法。需要注意的是,不同的编程语言和线程库可能有不同的API设计,但基本概念是相通的。本…

Cherno C++学习笔记 P36 初始化类成员

这一篇文章我们主要讲一下如何初始化类成员&#xff0c;并给出一个初始化类成员的小技巧。我们都知道&#xff0c;我们会使用构造函数来初始化我们的类成员变量。 首先我们来举一个简单的小例子&#xff0c;展现一下构造函数的功能&#xff1a; #include<iostream> #in…

快速解决git@github.com: Permission denied (publickey)

在使用github进行项目克隆的时候&#xff0c;有些时候会出现“gitgithub.com: Permission denied (publickey)”的错误。这个问题大部分是由于新设备本地密钥未加入gitbub列表中&#xff0c;我们可以通过加入新机器身份验证解决问题。 一、问题现象 二、问题解决 2.1&#xf…

移动端h5自适应rem适配最佳方案

网页开发中&#xff0c;我们常用的单位有如下几个&#xff1a; px&#xff1a;像素固定&#xff0c;无法适配各分辨率的移动设备em: 该单位受父容器影响&#xff0c;大小为父元素的倍数rem: 因为html根元素大小为16px&#xff0c;所以默认 1rem 16px&#xff0c;rem只受根元素…

C语言程序设计P5-5【应用函数进行程序设计 | 第五节】—知识要点:变量的作用域和生存期

知识要点&#xff1a;变量的作用域和生存期 视频&#xff1a; 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 有一个一维数组&#xff0c;内放 10 个学生成绩&#xff0c;写一个函数&#xff0c;求出平均分、最高分和最低分。 任务要求用一个函数来完…

Jenkins与SonarQube持续集成搭建及坑位详解

Jenkins和SonarQube都是软件开发过程中常用的工具,它们在代码管理、构建、测试和质量管理方面发挥着重要作用。以下是关于Jenkins与SonarQube的作用及整合步骤环境搭建的详细解释: 一、Jenkins与SonarQube的作用 Jenkins: Jenkins是一个开源的持续集成和交付工具,它可以帮…

item2 for macos

安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh&#xff0c;所以不用安装&#xff0c;10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…

[搜广推]王树森推荐算法——基于物体的协同过滤

基于物体的协同过滤 ItemCF 基于物体的协同过滤&#xff08;Item-Based Collaborative Filtering&#xff0c;简称ItemCF&#xff09;是一种经典的推荐系统算法 基本思想 量化用户对物品的兴趣&#xff0c;通过分析用户的行为来找到与目标物品相似的其他物品&#xff0c;然后…

3D 生成重建035-DiffRF直接生成nerf

3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF&#xff0c;用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型&#xff0c;并且容易出…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

linux - 存储管理

1.了解硬件 -- 磁盘 硬盘有机械硬盘(HDD)和固态硬盘(SDD) 接下来&#xff0c;主要以机械磁盘为例(更具代表性&#xff0c;在linux系统层面&#xff0c;无论是机械磁盘还是固态硬盘&#xff0c;文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块) 1.盘片&#x…

打造高效的HIS与DAT文件解析工具

在工业数据采集和存储中&#xff0c;HIS 和 DAT 文件是非常常见的二进制数据格式。然而&#xff0c;解析这些固定块大小的二进制文件并将其转换为易读的 CSV 格式并非易事。本文将深入讲解如何使用 Python 和 PyQt5 打造一款图形化工具&#xff0c;轻松解析和转换这些文件&…

设计模式-装饰器模式(结构型)与责任链模式(行为型)对比,以及链式设计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.装饰器模式1.1概念1.2作用1.3应用场景1.4特点1.5类与对象关系1.6实现 2责任链模式2.1概念2.2作用2.3应用场景2.4特点2.5类与对象关系2.6实现 3.对比总结 前言…

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff1b;当然&#xff0c;我们只要满足进程不同就行&#xff0c;所以即便是同一个主机&#xff0c;只要是不同进程&#xff0c;基于网络来传…

题海拾贝:力扣 141.环形链表

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

SEC_ASA 第二天作业

拓扑 按照拓扑图配置 NTP&#xff0c;Server端为 Outside路由器&#xff0c;Client端为 ASA&#xff0c;两个设备的 NTP传输使用MD5做校验。&#xff08;安全 V4 LAB考点&#xff09; 提示&#xff1a;Outside路由器作为 Server端要配置好正确的时间和时区&#xff0c;ASA防…

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖&#xff0c;之前运行没有问题的&#xff0c;但有时启动会提示&#xff1a; java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…

markdown入门

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…