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

大家好,我是大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.mzph.cn/diannao/63915.shtml

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

相关文章

revit转gltf,revit转3dtiles,如何将Revit模型转为3DTiles格式并在Cesiumjs中高效可视化

Revit模型导出gltf、glb与3dtiles有多种方式,但一般的商业工具收费普遍较高:Cesiumlab导出3dTile格式数据,Cesiumlab暂时可试用3天,会员版收费每年800;BimAngleEngine导出3dTile格式数据BimAngleEngine暂时可试用30天&…

可视化建模与UML《部署图实验报告》

一、实验目的: 1、熟悉部署图的基本功能和使用方法。 2、掌握使用建模工具软件绘制部署图的方法 二、实验环境: window11 EA15 三、实验内容: 根据以下的描述,绘制部署图。 网上选课系统在服务器端使用了两台主机,一…

在CentOS中安装和卸载mysql

在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…

三相电机不转,如何判断好坏?

在现代工业生产中,三相电机被广泛应用于各类机械设备中,由于其高效能和稳定性,成为驱动设备的首选。然而,在实际使用过程中,三相电机有时会出现不转动的情况,这不仅会影响生产效率,还可能对设备…

ChatGPT大模型 创作高质量文案的使用教程和案例

引言 随着人工智能技术的飞速发展,大语言模型如 ChatGPT 在创作文案、生成内容方面展现出了强大的能力。无论是个人用户还是企业用户,都可以利用 ChatGPT 提高工作效率、激发创意、甚至解决实际问题。本文将详细介绍 ChatGPT 如何帮助创作各类高质量文案,并通过具体案例展示…

使用ERA5数据绘制风向玫瑰图的简易流程

使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图,想到的还是高分辨率的ERA5land的数据(0.1分辨率,逐小时分辨率,1950年至今)。 风向,我分为了16个&…

软考:工作后再考的性价比分析

引言 在当今的就业市场中,软考(软件设计师、系统分析师等资格考试)是否值得在校学生花费时间和精力去准备?本文将从多个角度深入分析软考在不同阶段的性价比,帮助大家做出明智的选择。 一、软考的价值与局限性 1.1 …

Qt绘制仪表————附带详细说明和代码示例

文章目录 1 效果2 原理3 编码实践3.1 创建仪表属性类3.2 设置类属性3.3 绘制图案3.3.1 设置反走样3.3.2 绘制背景3.3.3 重新定义坐标原点3.3.4 绘制圆环3.3.5 绘制刻度线3.3.6 绘制刻度线上的描述值3.3.7 绘制指针3.3.8 绘制指针数值和单位3.3.9 控制指针变化 扩展福利参考 1 效…

vue 纯前端预览pdf,纯前端实现pdf加水印下载文件也带水印,防止pdf下载

效果图 1.pdf预览 原理:主要是利用pdfh5这个插件来完成的 使用方法: 1.页面需要有一个容器例子: 2.下载pdfh5插件 npm install pdfh5 (注意:webpack5之后不会下载polyfill 需要手动下载 所以引入pdfh5的时候会报错) 解决方案:下载 node-polyfill-webpack-plugin npm i…

重生之我在异世界学编程之C语言:深入文件操作篇(上)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 函数递归与迭代 引言正文一、为什么要用文件二、文…

linux-16 关于shell(十五)date,clock,hwclock,man,时间管理,命令帮助

想显示一下当前系统上的时间该怎么显示?有一个命令叫做date,来看date命令,如下图, 第一个星期几对吧?然后是月日小时分钟秒,最后一个是年对吧?CST指的是它的时间格式,我这个可以先姑…

【Apache paimon】-- 集成 hive3.1.3 异常

目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…

严蔚敏老师,一路走好

Hey,小伙伴们,今天我要和大家分享一个令人心痛的消息,但也是我们向一位伟大的学者致敬的时刻。:清华大学计算机教授、《数据结构》编著者严蔚敏 去世,享年 86 岁。她的离去,让无数学子和同行感到深深的哀痛…

Input Action (输入动作) 在虚幻引擎中常用的值类型

1. Digital (bool) 含义: Digital 类型代表一个离散的、二元的输入状态,它只有两种可能的值:true(按下,激活)或 false(未按下,未激活)。 用途: 最常用于表示按键或按钮的按下状态。 适合于开关类型的操作,比如: 跳跃(按键按下时跳跃,松开时不跳跃) 奔跑/行走切换 …

PostgreSQL的学习心得和知识总结(一百六十四)|深入理解PostgreSQL数据库之在 libpq 中支持负载平衡

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

智能机器人技术突破,开启移动领域无限可能

移动机器人已经成为现代社会不可或缺的一部分,在各个领域发挥着越来越重要的作用。在这个过程中,富唯智能机器人以其卓越的技术突破,引领着移动机器人领域的发展潮流。 一、技术突破的体现 1.深度学习与计算机视觉:富唯智能机器人…

解决 “TypeError: ‘tuple‘ object cannot be interpreted as an integer“ 错误提示

错误背景 这个错误通常出现在期望一个整数时,却传入了一个元组(tuple)。Python 无法将元组解释为整数,因此会抛出 TypeError。 错误示例 python 复制代码 for i in (1, 2, 3): print(range(i)) 运行时会抛出如下错误:…

【C语言】拆数字组成最大数

相信你是最棒哒!!! 文章目录 题目描述 正确代码 法一注释版 简洁版 法二注释版 简洁版 题目描述 任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。 输入描述 …

Android14 AOSP 允许system分区和vendor分区应用进行AIDL通信

在Android14上,出于种种原因,system分区的应用无法和vendor分区的应用直接通过AIDL的方法进行通信,但是项目的某个功能又需要如此。 好在Binder底层其实是支持的,只是在上层进行了屏蔽。 修改 frameworks/native/libs/binder/Bp…

汽车车牌识别数据集,支持YOLO,COCO,VOC格式的标注,8493张图片,可识别多种环境下的车牌

汽车车牌识别数据集,支持YOLO,COCO,VOC格式的标注,8493张图片,可识别多种环境下的车牌 数据集分割 训练组82% 6994图片 有效集12% 999图片 测试集6% 500图片 预处理 自动…