数仓架构之为什么要进行数仓分层

news2025/1/20 5:10:17

数仓分层这个概念想必大家都很熟悉,不管是在实际的开发工作当中会用的,还是在面试官面试你的时候会问到:你之前的项目是按照什么分层的,分哪几层,数仓分层有什么好处,举个栗子说说。

简而言之,数仓分层,是大家不能避过去的一个重点知识。

接下来,我会分享自己在多年的大数据行业的关于数仓分层的一些知识点与观点。

0,先说说什么是数仓分层吧

数据仓库:是一个由 有主题性的,可数据存储,可数据管理,方便数据开发于一体的集合。

数仓分层之后,每一层的数据的粒度,作用都很清晰,主题鲜明,也方便大数据开发人员对于业务的开发。

1,基于项目中Hive数据仓库的ETL数据流

下面这张图是在项目上的数据架构,数据的流向图:

2,数仓分层是怎么分的?分为哪几层?

一般在任何一家公司,不管是保险,银行,基金,证券,都会分4层。

比如说下图(某银行项目)为例:有SA,SHDATA,CDL,DM 四层

比如说下图(某证券项目)为例:有ODS,EWD,CDM,ADM 四层

ODS层,从各个原系统拿数据,进行数据入湖。数据一般不做任何处理,与源数据无差异。

EDW层,在ODS层的基础上,解决数据一致性的问题。

CDM层,为公共数据层,会开发出一些表,作为公共层,被下游(ADM层使用)。

ADM层,为集市应用层,开发出最终的接口表给业务使用。

3,为什么要进行数仓分层呢?有什么好处嘛? 

这个对于做过银行,证券的项目开发,基金公司的数据运维之后,理解的更加深刻了。

3.1,好处一:方便数据的血缘追踪,确定影响范围

3.1.1,(基金项目)

当每天的数据跑批完毕,把接口表(目标表)的数据报送给证监会或者人民银行的时候会给你进行数据校验,如果有问题会返回一个bad,告诉你哪条数据的哪个字段不对不符合哪个校验规则。这个时候,如果你刚入职,恰巧又拥有扎实的sql技能,别慌,你可以查看该代码,尽管有很多层代码的,但你可以一直追根溯源,查出在哪一层出错。关键是,你可以根据这一层出错,分析出哪些区域的数据受到了影响,数据是不正确的。

3.1.2,(银行项目)

简单的说,我们把应用集市的数据给到下游,最终给业务呈现的是一个业务表,如果业务人员发现某个业务表的部分数据不对,怎么办?我们要根据开发的代码,倒推出数据在哪一层的时候就开始不对,出现了问题。当然出现问题的原因可能有N多种,但是我们溯源出最底层的问题之后,我们可以快速判断,它的危害范围,及时的去维护好数据,把损失降到最低。

3.2, 好处二:复杂问题简单化,清晰数据结构

如果一个计算过程,太过于复杂,比如说要计算年度客户量??

我们可以先展示日维度的客户详细,可以查看明细数据。

接着根据日维度的客户数据,按照月维度进行汇总。

最后根据月维度的客户数据,按照年维度进行汇总。

依次展示三层的数据,咱就把复杂的问题,一步步拆解为简单化,每一层的数据结构很清楚,并且作用很明显。

重点是留下了一些余地,为什么这么说?

如果下次有个需求要算同比,环比的客户数据量呢??

求同比,直接拿年维度的中间表。求环比,直接拿月维度的中间表。

分层的好处真的太多了,更加具有前瞻性。

3.3,好处三:减少重复开发

规范数据分层,开发通用的一些中间层的表,可以极大的减少重复计算。

因为很多的业务表可能都有中间层的计算,如果大家都从源表开始依赖取数计算,那重复计算也太多了。如果直接拿中间层结果表,那计算量大大减少。

并且中间层表还比较好进行追溯,如果计算逻辑发生变更,咱们只需要更改中间表就行,而不需要把每个涉及到的业务表都去更改,那也太费劲了。

3.4,好处四:隔离原始数据

以3.2的栗子来讲,咱最终统计的数据的年客户量,就与咱们的底层数据隔离开来了。

不仅仅与底层数据隔离,而且还和月维度,日维度的数据也隔离开来了。

底层一套数据,最终的集市应用层又有一套数据,明显解耦。

3.5,好处五:以空间换时间

以空间换时间,什么意思?

以3.2的栗子来讲,咱最终要统计的数据的年客户量。理论上,咱们只需要落地这一张最终的业务表就行,但是,咱们为了大局着想,为了好追溯,为了懒得再多些代码,为了逻辑清晰层次分明,咱们又建立了一个大家公用的中间表(或者不一定是公共表,也可以是自己落地该表的独有的中间表,为了方便追根溯源),那这中间表又多占了存储空间。

虽然说多占了空间吗,但是计算量明显减少了啊,时效性上来了啊。咱也好针对问题进行追根溯源,方便你我他去依赖,开发人员的工作效率也上去了。好处太多了。

多占空间,这是弊端,提升效率,这是优势。

但世界上哪有这么好的事情呢,既可以少占空间,还计算的快,还方便查问题。

咱做人不能既要又要还要!!!

===============================================================

ok,如果面试官问你这个知识点,你可以这么密集的输出你的心得,那肯定会得到面试官的青睐。好吧,分享了这么多,希望你可以清晰的理解,什么是数仓分层?为什么要数仓分层?

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

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

相关文章

Metasploit基本命令

1. 开启控制台 命令: msfconsole2. 搜索模块 命令: search ms17-010 # 模块名这里以搜索 ms17-010 为例, auxiliary 开头的为测试模块,也就是 POC,看看存不存在漏洞, exploit 开头的为攻击模块 3. 调…

数据结构(十六)----外部排序

目录 一.外部排序 1.外部排序的原理 2.外部排序时间开销的分析 3.外部排序的优化 (1)多路归并 (2)减少初始归并段数量 二.败者树 三.置换-选择排序 四.最佳归并树 一.外部排序 1.外部排序的原理 若想清楚外部排序的原理…

Java GUI-登录注册功能实现

Java GUI-登录注册功能实现 技术栈: MySQL8.0JFrameSwing 功能描述: 登录:输入用户名、密码点击登录调转到登录页面注册:点击注册按钮,输入用户名和密码注册成功并返回注册页面注:本项目登录注册没有实现…

高考志愿系统-模拟填报模块分析

1.获取所有志愿列表 接口: http://localhost:81/dev-api/college_entrance/aspiration/list 默认传参pageNum1&pageSize10, 请求方法: GET 接口内方法同样首先设置分页信息,然后修改查询出的所有志愿信息列表中的学生id属性 2.详细志愿查看 接口…

YOLOv5改进 | Neck | 添加双向特征金字塔BiFPN【小白轻松上手 | 论文必备】

🚀🚀🚀本专栏所有的改进均可成功执行🚀🚀🚀 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法,YOLOv5可能比YOLOv8的效果更好。但是针对不同的数据…

cypress的安装使用

cypress npm install -g cnpm --registryhttps://registry.npm.taobao.org cypress的启动打开 npx cypress open js函数的回调 function print(string,callback){console.log(string)callback() } print("a",function(){print("b",function(){console.l…

STL <string>--------String的OJ题目

1.题目截图(把字符串转换成整数----atoi) 1.1题目解析(在代码里) class Solution { public:int myAtoi(string str) {// 100% 97.45% int len str.size();if(len 0)return 0;int i 0, flag 1, isSignal 0, res 0;while(…

QJsonObject构建指定的JSON结构

如今我们生活处处用到AI,AI 带给了我们很多方便,但作为程序员我们,虽然不能开发什么 AI,但时不时需要调用国内四大平台的AI接口。很多平台接口都是用JSON作为数据载体传送。 如下接口数据 ,有些人不知道怎么构建。 1,…

[C++核心编程-08]----C++类和对象之运算符重载

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

黑马guli商城项目初始化-SpringCloud微服务项目初始化使用SpringCloudAlibaba快速搭建分布式系统

视频教程:https://www.bilibili.com/video/BV1np4y1C7Yf?p4&spm_id_frompageDriver&vd_source0b3904471b2f8a3a133e05bd42f729a9 这里写目录标题 1.服务架构图2.初始化目录结构3.初始化数据库4.使用逆向工程项目生成数据库CRUD5.创建工具项目6.配置mybati…

CentOS7使用Docker安装Redis图文教程

1.拉取Redis镜像 这里制定了版本,不指定默认latest最新版 docker pull redis:6.0.8提示信息如下即为下载成功 2.上传配置文件 官方配置文件(找自己对应的版本):reids.conf 或者将如下配置文件命名为redis.conf,上…

面试题草稿

目录 一.JAVA基础 1.八个基本数据类型,长,占几个字节,取值范围是多少。 基本类型: 2.面向对象的特征 1. 封装(Encapsulation) 3.实现多态的几种方式 4.什么叫装箱什么叫拆箱 5.装拆箱分别…

Nginx启动关闭重启用脚本实现

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Nginx(“engine x”…

快手截流多功能协议引流多线程多账号使用

在市场上,类似的软件售价都在几千元,但我发现这款全新版本的软件已经更新,而且我只需要配合使用谷歌浏览器,稍微调慢一点延时,我就可以像专业人士一样流畅地进行操作。 评论对于我而言是一种艺术,而不仅仅是…

植物大战僵尸杂交版(含下载方式)

最近时间,一款很火的植物大战僵尸杂交版火爆出圈,在玩家之间疯狂扩散。各种奇特的杂交组合让游戏变得更加有趣。 游戏介绍 植物大战僵尸杂交版是一款将《植物大战僵尸》和植物杂交概念结合在一起的独特塔防策略游戏。它将《植物大战僵尸》中的植物与进行…

【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置

本节博客主要是通过“在排序数组中查找元素的第一个和最后一个位置”总结关于二分算法的左右界代码模板,有需要借鉴即可。 目录 1.题目2.二分边界算法2.1查找区间左端点2.1.1循环条件2.1.2求中点的操作2.1.3总结 2.2查找区间右端点2.1.1循环条件2.1.2求中点的操作2.…

FebHost:为什么企业需要注册保加利亚.BG域名?

在当今全球化的商业环境中,对于与保加利亚市场息息相关的企业而言,选择合适的域名至关重要。.BG域名作为企业在线身份的重要组成部分,提供了多重利好,成为业内不容忽视的战略资源。 首先,地域标识性强是.BG域名的一大…

ArrayList和LinkedList的使用

ArrayList List<> list new ArrayList<>(); LinkedList

深入理解 House of Cat

Index 序言利用 FSOP 调用 House of Cat利用条件伪造IO流条件完整调用链分析 模板System (one_gadget) 模板ORW模板 Demo & Exp利用 __malloc_assert 调用 House of Cat例题&#xff1a;题目思路Exp 序言 原文章&#xff1a;深入理解 House of Cat 随着 GNU 持续不断的更…

【Linux-IMX6ULL-DDR3简介测试-RGBLCD控制原理】

目录 1. DDR3 简介1.1 前要基本概念RAM & ROM 2. DDR3测试及初始化3. RGBLCD简介及控制原理3.1 RGBLCD简介3.2 RGBLCD-时序-像素时钟-显存3.2.1 RGB LCD时序3.2.2 像素时钟&#xff08;800*400分辨率&#xff09;3.2.2 显存&#xff08;800*400分辨率&#xff09; 3.3 RGBL…