数仓的分层理论

news2024/12/31 5:44:52

一、简介

2021-4-25 11:04:16

数据仓库分层是数据仓库设计中非常重要的一个环节,一个好的分层设计可以极大地简化数据仓库的操作,提升使用体验。然需要注意的是,分层理论并不绝对,只是提供一种普适的指导思想和原则,最重要的还是要看业务的具体需要。

为什么要做数据分层?

作为数据分析人员,我们自然希望自己的数据体系分层清晰、有序,容易调用和维护,对设计者和使用者来说,都赏心悦目,比如说下图这种:

在这里插入图片描述

层次清晰,且表之间的依赖关系明确,使用者极易接受。

但实际上,大多数情况下,我们所使用的数据体系可能是层级混乱,且依赖关系复杂,循环依赖,跨层依赖多,冗余严重的情况,如下图:

在这里插入图片描述

所以我们需要一种有效的数据组织与管理的体系,来使得我们的数据更为有效,调用更加高效,这一体系,或者说这套规范,就是数据分层。

当然,数据分层并不能解决所有的数据问题,但是它的存在可以给你带来很多好处,比如说:

  1. 清晰展示数据结构:每个数据层都有它的作用域和职责,在使用表的时候可以据此更加方便的定位、理解表的职能;
  2. 减少重复的开发:规范数据分层,开发一些通用的中间层数据,能够减少大量的重复计算;
  3. 统一数据口径:通过分层,提供统一的数据出口,从而统一对外输出的数据口径;
  4. 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。

二、初级分层

目前,比较通用的数据分层体系,是把数据分为3层:

  • ODS层,即数据运营层,存放的是接入数据仓库的贴源数据;
  • DW层,即数据仓库层,这里存放的是我们需要重点设计的数据仓库中间层数据;
  • APP层(ADS),即数据应用层,这里存放的是面向业务制定的应用数据。(如报表数据)

在这里插入图片描述

下面详细介绍一下这三大层。

2.1 ODS层

ODS层,全称是Operational Data Store,直译做“可操作数据存储”。是面向主题的,最接近数据源的层,也称贴源层。

数据源中的数据,经过抽取、转换后装载进ODS层,就是ETL三板斧操作。

ODS层的数据,总体上是按照业务系统的分类原封不动的转移进来的。

一般来讲,考虑到后续的数据回溯问题,不会在ODS层做过多的数据清洗工作,该层的本质是“原封不动传入”,至于异常值处理、降噪、去重等数据清洗工作,是后面的DW层来做的。

事实上,也不能简单的将ODS层看成是业务系统数据源的一个简单备份,二者还是有些区别的,比如说ods层一般是放在大数据分布式系统中,而业务系统DB基本是放在关系型数据库中。

ODS层在数据同步时一般是通过数据库直连抽取或者数据库日志抽取。

关于ODS物理表的表命名规范,尽量跟业务系统保持一致,可以添加额外的标识来区分增量表和全量表,比如说加入"_delta"来标识该表为增量表。

增量表:以天为分区,每个分区存放当日的新增数据;

全量表:以天为分区,每个分区存放截止到当日的全量快照数据。

2.2 DW层

DW层,全称是Data Warehouse,直译就是数据仓库。

这是我们做数据仓库的核心一层,精华所在。在这里,会将ODS层的数据按照各种主题进行聚合,从而建立不同的数据分析模型。

DW层根据功能又可以细化成3层:

  • DWD层:即Data Warehouse Detail,直译“数据仓库明细层”;
  • DWM层:即Data Warehouse Middle,直译“数据仓库中间层”;
  • DWS层:即Data Warehouse Service,直译“数据仓库服务层”

2.2.1 DWD层

个人感觉是DW中相对最重要的一层,

DWD层一般保持着跟ODS层一样的数据粒度,是在ODS层的基础上做了更多的质量优化和精度保证等,个人感觉可以认为是DW的基础。

另外,该层会采用一些维度退化的方法,将维表退化到事实表中,减少事实表和维表的关联。即可以将事实表中的某些重要属性字段做适当冗余,做适当的宽表化处理。

除此之外,DWD层也会做一部分的数据聚合工作,将相同主题的数据汇集到一张表中,提高数据的可用性。

个人感觉,层的主要职能较为清晰,但是细节上功能划分其实并没有那么严格,可定制性相对比较强,比如说DWD层也可以做聚合,并非是DWM层独有

DWD层存放的一般是明细事实表,明细事实表的设计有五个步骤:选择业务过程 -> 确定粒度 -> 选择维度 -> 确定事实(度量) -> 冗余维度。

2.2.2 DWM层

该层主要是在DWD层的基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。

直观地讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。

在有的地方,该层也被称为是DWB(Data Warehouse Basis),即数据仓库基础层,做轻度汇总。

2.2.3 DWS层

也称为数据集市、宽表。

按照业务划分,如订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询等。

一般来讲,该层的数据表会相对比较少,但是一张表会涵盖很多的业务内容,由于字段数比较多,所以会被称为“宽表”。

在实际计算中,如果直接从DWD或者ODS来计算宽表的统计指标,会存在计算量太大或者维度太少的问题,所以一般的做法是,在DWM层计算出多个窄的中间表,然后拼接成一张DWS的宽表。但是宽和窄的界限不宜界定,也可以去掉DWM层,只保留DWS层,把所有数据放在DWS层即可。

DWS层的功能,使用规范化语言来描述:

以分析的主题作为建模驱动,基于上层应用和产品的指标需求,构建公共粒度的汇总指标表。以宽表化作为手段,来构建各种统计指标,如形成日、周、月粒度的汇总明细。

如果存在7天和30天的事实,可以选择用两列来存放7天和30天的事实,但是需要在列名和字段上说明清楚。

2.3 APP层

一般是提供给数据产品和数据分析使用的数据。比如我们常说的报表数据,一般放在这里。

有的参考文献里也称这一层是ADS层,全称是“ApplicationData Service”

2.4 维表层(DIM层)

建立一致性数据分析维表,方便进行交叉探查。

据参考文献2:

维表层分两种:

  • 高基数维度数据:一般是用户资料表、商品资料表等类似资料表,数据量可能是千万级或者上亿级别;
  • 低基数维度数据:配置表,如中文含义表、日期码表,数据量在个位数或几千几万不等。

在这里插入图片描述

三、简单分层示例

以下摘自参考文献2.

比如说用户访问日志这一数据的管理。

在这里插入图片描述

DWD层:整合数据来源,并做加工清洗;

DWM层:选取核心维度来做聚合,产生多个中间表;

DWS层:把每个主题的全部数据放在一张表中,产出各个业务主题的宽表。

APP层:从DWS层的一张或几张宽表中取出数据,拼接成一张应用表即可。

四、 各层的存储与计算

并不绝对,目前大数据发展日新月异,各种技术层出不穷,另外具体业务的需要,也不可能让这种东西固定下来。

Data Source:一般是各种业务库和埋点库等,存储的话一般是用MySQL、PostgreSql之类的;

ODS层:ODS层的数据一般非常大,所以大多数时候会存在HDFS上,如HIVE和Hbase,HIVE居多;

DW层:这个的存储跟ODS一致,但为了降低处理难度,也会放在PG或者ES数据库中;

APP层:支持数据应用,如报表等,一般都要求尽量快的响应速度,所以会选择放在MySQL、PG、Redius等可实时的数据库中。

计算引擎的话,可以简单看看下面这种,仅为简单参考,毕竟要具体情况具体分析。

在这里插入图片描述

五、对数据分层的总结

从能力范围上来讲,我们希望80%的需求都由20%的表来支持。直接点讲,就是80%的需求,都可以用DWS层的表来支持就可以,剩下DWS支持不了的,就用DWM和DWD层的表来支持,这些再支持不了的话,就从ODS去捞原始日志。

从数据聚合程度来讲,我们希望,越往上的数据聚合程度越高,DWD是保持了原始粒度,基本不做聚合(维度退化不算),DWM做轻度聚合,DWS做更高的聚合。实际上这里对聚合的程度我还是摸不准,从这个角度来讲,我们可以理解成我们是以数据的聚合程度来划分数据层次的。

从对应用的支持上来看,越往上,对应用越友好,比如说APP层,实际上就是针对应用来设计的。

提几点需要注意的:

  • 应用层不能直接调ODS;
  • DWS应该优先调用DWD和DIM;
  • 应该避免APP层过渡引用DWD层。

六、附录

宽表

顾名思义,宽表指字段特别多的数据表。一般是将业务主体相关的维度、指标等关联在一起得来。

特点:

  • 大量内容放在同一张表,宽表本身已不符合第三范式的设计规范。
  • 会造成大量数据冗余;
  • 但是可以提高数据查询的性能。

DWD层,对ODS层做一些数据清洗和 规范化等操作,

DWS层,对ODS层或者DWD层做一些轻度的汇总

七、参考文献

  1. 数据仓库-通用的数据仓库分层方法
  2. 【漫谈数据仓库】 如何优雅地设计数据分层 ODS DW DM层级
  3. 数据仓库分层中的ODS、DWD、DWS
  4. 数据仓库分层设计
  5. 关于构建数据仓库的几个问题

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

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

相关文章

[Spring Cloud]:Study Notes·壹

文章目录 摘要1 认识微服务1.1 单体架构与分布式架构1.2 分布式架构与微服务1.3 微服务架构 2 nacos2.1 什么是nacos2.2 nacos使用2.2.1 nacos使用逻辑2.2.2 启动下载好的nacos2.2.3 引入依赖2.2.4 各注册服务中配置nacos相关信息2.2.5 测试nacos注册成功 3 Ribbon负载均衡3.1 …

改进YOLO系列 | YOLOv5/v7 引入谷歌 Lion 优化器

论文地址:https://arxiv.org/pdf/2302.06675.pdf 代码地址:https://github.com/google/automl/tree/master/lion 我们提出了一种将算法发现作为程序搜索的方法,并将其应用于发现用于深度神经网络训练的优化算法。我们利用高效的搜索技术来探索一个无限且稀疏的程序空间。为了…

计算机视觉-语义分割: FCN DeepLab Unet

文章目录 1. 概要1.1 什么是语义分割1.2 语义分割作用1.3 全卷积网络1.4 反卷积1.5 上采样三种方式1.6 跳层结构 Skip Layer 2. FCN架构3. DeepLab-v13.1 改进点3.2 空洞卷积(Atrous/Dilated convolution) 4. U-Net参考 1. 概要 1.1 什么是语义分割 从像素水平上理解、识别图…

微信小程序——Echarts使用(保姆式教程)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

从入门到精通!MATLAB基础教程及常用工具箱介绍

文章目录 基础介绍MATLAB窗口介绍MATLAB基本语法变量和数组控制流语句函数的定义和调用绘图MATLAB常用工具箱统计工具箱(Statistics Toolbox)控制系统工具箱(Control System Toolbox)信号处理工具箱(Signal Processing Toolbox&am…

搭建TiDB负载均衡环境-HAproxy+KeepAlived实践

作者: 我是咖啡哥 原文来源: https://tidb.net/blog/8e8cca1d 前言 HAProxy 提供 TCP 协议下的负载均衡能力,TiDB 客户端通过连接 HAProxy 提供的浮动 IP 即可对数据进行操作,实现 TiDB Server 层的负载均衡。同时&#xff0c…

SOFA Weekly|SOFARPC 5.10.1 版本发布、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

pytorch搭建AlexNet网络实现花分类

pytorch搭建AlexNet网络实现花分类 一、AlexNet网络概述分析 二、数据集准备下载划分训练集和测试集 三、代码model.pytrain.pypredict.py 一、AlexNet网络 概述 使用Dropout的方式在网络正向传播过程中随机失活一部分神经元,以减少过拟合 分析 对其中的卷积层、…

SORT+yolov5多目标跟踪

SORT 是一种简单的在线实时多目标跟踪算法。要点为: (1)以 IoU 作为前后帧间目标关系度量指标; (2)利用卡尔曼滤波器预测当前位置; (3)通过匈牙利算法关联检测框到目标&a…

thingsboard安装使用教程

1、安装tb-postgres tb-postgres是ThingsBoard与PostgreSQL数据库的单实例。 拉取tb-postgres镜像 docker pull thingsboard/tb-postgres 创建tb-postgres容器 docker run -itd --name tb-postgres -p 9090:9090 -p 1883:1883 -p 5683:5683/udp -p 5685:5685/udp -p 5432:…

如何使用银行四要素API接口提高用户身份认证的安全性

银行四要素是指银行在开户、转账等行为中对客户身份的核实,包括姓名、身份证号、银行卡号和手机号码。为了满足客户实名认证的需求,我们开发了相应的API接口,方便第三方开发人员进行身份核实的操作。 API接口名称:银行四要素验证…

Grafana图表配置快速入门

1、Grafana图表配置快速入门 前面我们使用 Prometheus Grafana 实现了一个简单的 CPU 使用率变化图,但是这个图还有许多缺陷,例如: 左边栏的数值太小了无法调整,下面的图标信息无法定制化等等。 其实 Grafana 的功能是非常强大…

平面电磁波的反射与折射,极化滤波作用

目录 引言 反射定律和折射定律 反射系数和折射系数 平面电磁波在理想介质分界面上的全反射和全折射 全反射 全折射 极化滤波作用 平面电磁波在良导体上的反射与折射 引言 再复杂的电磁波我们都可以看作是很多平面电磁波的叠加 我们在前面介绍的时候,我们认…

【Android】使用Epoxy 注解处理器,自动生成大量的 Model 类,简化复杂的 RecyclerView 开发流程

Epoxy 是一个 Android 库,它可以帮助开发者更轻松地构建复杂的 RecyclerView。其中,ImageButtonModel_ 是 Epoxy 自动生成的一个 Model 类,用于表示一个带有图像的按钮。 下面是使用注解器自动生成代码截图: ImageButtonModel_…

《C++ Primer》--学习2

字符串,向量和数组 标准库类型 string 直接拷贝和拷贝初始化 如果使用等号()初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用等号,则执行的是直接…

css定位装饰

目录 1、垂直对齐方式 2、光标类型 3、边框圆角 4、overflow溢出部分显示效果 5、元素本身隐藏 6、案例 元素整体透明度 1、垂直对齐方式 浏览器在处理行内标签和行内块标签时,默认按照文字去解析。 浏览器文字类型元素排版中存在用于对齐的基线。 图片和文…

Spring Security --- Thymeleaf 中 Spring Security 的使用

目录 初步 获取属性 权限判断 初步 Spring Security可以在一些视图技术中进行控制显示效果例如:JSP或Thymeleaf在非前后端分离且使用Spring Boot的项目中多使用Thymeleaf作为视图展示技术Thymeleaf对Spring Security的支持都放在thymeleaf-extras-springsecurity…

gma 2.0.0a2 (2023.06.17) 更新日志

从本版本开始,gma 1.x 不再维护。一方面是由于精力和时间有限,另一方面由于 gma 2.x 与 1.x 相差巨大,同时维护两个相差巨大的版本较困难。   本版本 (gma 2.0.0a2)依旧为预览版,但内容已趋于稳定&#x…

2023年江西省赣州市职业院校技能大赛(中职组) 网络安全竞赛试题

2023年江西省赣州市职业院校技能大赛(中职组) 网络安全竞赛试题 三、竞赛任务书内容 (一)拓扑图 (二)A模块基础设施设置/安全加固(200分) 一、项目和任务描述: 假定你…

探索 StableDiffusion:生成高质量图片学习及应用

本文主要介绍了 StableDiffusion在图片生成上的内容,然后详细说明了StableDiffusion 的主要术语和参数,并探讨了如何使用 prompt 和高级技巧(如图像修复、训练自定义模型和图像编辑)来生成高质量的图片。 介绍StableDiffusion ▐ …