首页 > 其他分享 >数仓分层设计

数仓分层设计

时间:2022-11-10 18:23:08浏览次数:46  
标签:数仓 DWS ODS 分层 DWD 维度 设计 数据

  概述     数仓分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更容易理解和使用     数据分层的作用     我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是数据分层。数据分层的好处有

  1. 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
  2. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能减少极大的重复计算
  3. 统一数据口径:通过数据分层提供统一的数据出口,同意对外输出的数据口径
  4. 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
    分层设计的原则以及介绍一种通用的数据分层设计     一般情况下,将数据模型分为3层     1. 数据运营层ODS:存放的是接入的原始数据。经过ETL之后装入本层,大多是按照源头业务系统的分类方式而分类的。为了考虑后续可能追溯数据为题,因此对这一层不建议做过多的数据清洗工作,原封不动接入源数据即可,至于数据的去噪,去重,异常值处理等过程可以放在后面的DW层      2. 数据仓库层DW:重点设计的数据仓库中间层数据,在这里ODS层获得的数据按照主题建立各种数据模型,DW又细分       数据明细层:DWD(Data WareHouse Detail)         该层一般保持和ODS层一样的数据粒度,并且提供给一定的数据质量保证。同时为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化到事实表中,减少事实表和维度表的关联。另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性       数据中间层:DWM(Data WareHouse Middle)         在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表提升公共指标的复用性,减少重复加工,直观来说,就是对通用的核心维度进行聚合操作,算出相应的统计指标       数据服务层:DWS(Data WareHouse Service)         又称为数据集市或者宽表,按照业务划分,例如流量,订单,用户等,生成字段比较多的宽表,用于后续的业务查询,OLAP分析,数据分析等。       在实际计算中,如果直接从DWD或者ODS计算宽表的统计指标,会存在计算量太大并且维度太少的问题。一般做法是。在DWM层先计算出多个小的中间表,再拼接成一张DWS的大宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只保留DWS层,将所有的数据放在DWS亦可     一般采用维度模型方法作为理论基础,更多的采用一些维度退化手法,将维度退化至事实表中,减少维度表与事实表的关联,提高明细数据表的易用性;同时在汇总数据层要加强指标的维度退化,采用更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工     例如:     表1:     姓名,城市,年龄     表2:     姓名,订单,订单金额     退化成宽表:     姓名,城市,年龄,订单,订单金额     维度退化感觉就是把维度对应的描述直接放在事实表中,使用时不再关联维度表,把表做宽,查询更方便     数据应用层APP:面向业务定制的应用数据     主要提供给数据铲平和数据分析使用的数据,一般会放在ES,MYSQL,Redis等系统供线上系统使用,也可以放在Hive中供数据分析和数据挖掘使用     维表层 Dimension     最后补充一个维表层     1. 高基数维度数据:一般是用户资料表,商品资料表类似的资料表。数据量可能是千万级或者上亿级别     2. 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万

 

    具体案例     电商网站的用户访问日志:       1. 在ODS层中,由于各端的开发团队不同或者其他问题,用户的访问日志被分成了好几张表,上报到ODS层中       2. 为了方便大家的使用,我们在DWD层做了一张用户访问行为天表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,提升数据质量,这样就有了一张可供大家方便使用的明细表了       3. 在DWM层,从DWD层中选取业务关注的核心维度来做聚合操作,比如只保留人、商品、和页面区域维度。类似的 需要做很多个DWM的中间表       4. 然后再DWS层,将一个人在整个网站中的行为数据放到一张表中,这就是我们的大宽表。可以快速满足大部分的通用型业务需求       5. 最后在APP层,根据需求从DWS层的一张或者多张表取出数据拼接成一张应用表即可

 

        落地实现     1. DataSouce:数据源一般是公司的业务数据库和埋点数据,当然也有可能是第三方购买数据等多种数据来源方式,一般是mysql     2. ODS:数据量很大,大多数公司选择放在HDFS上,HIVE或者hbase,HIVE居多     3. DW:与ODS存储一致     4. APP:应用层的数据,要求响应快:放在mysql中

 

    思考     数据分层的原则是什么?为什么这样分?每层的界限是什么?     1. 从对应用的支持来说,越靠上的层次,对应用越友好。比如APP层,基本是完全为应用设计。DWS层的话,相对来讲就会有一点点理解成本,然后DWM和DWD层就比较难理解了,因为它的维度可能比较多,而且一个需求可能要多张表经过很复杂的计算才能完成      2. 从能力范围上来讲,我们希望80%的数据可以由20%的表来支持     3. 从数据聚合程度来讲,越上层的聚合程度越高    
 

 

 

 

   

标签:数仓,DWS,ODS,分层,DWD,维度,设计,数据
From: https://www.cnblogs.com/qiezi777/p/16877985.html

相关文章

  • 浅谈PHP设计模式的原型模式
    简介:原型模式,属于创建型模式的一种。主要针对对象进行克隆,把被克隆的对象称之为原型,原型模式称之为克隆模式也许更为贴切。用原型实例指定创建对象的种类,并且通过拷贝这......
  • 复杂 A/B 实验如何设计?火山引擎 DataTester 帮你落地!
    数字化转型时代,越来越多企业将目光聚焦于“数据驱动增长”的实践上,A/B实验则在其中扮演着愈加重要的角色。A/B实验又称对照试验,但并非人们字面认知的“抛出A和B两个......
  • 喜讯| 凡拓数创荣获亚太空间设计大奖赛金奖!
    喜讯|凡拓数创荣获亚太空间设计大奖赛金奖! 凡拓数创设计作品 『天安溧水未来生态城展厅』 项目荣获亚太地区建筑与设计领域重要奖项之一【2022·APSDA亚太空间设计大......
  • C++语言程序设计课程设计任务书
    C++语言程序设计课程设计任务书一.课程设计的目的全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法。正确理解掌握C++面向对象程序设计的基本特性:类、对......
  • 设计模式-单例模式(最全总结)
    单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。饿汉式单例模式在类加载的时候就马上初始化了,此时还没到运行时只是将......
  • 图解23种设计模式
    一、单一职责原则就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职......
  • 设计模式学习(八):桥接模式
    设计模式学习(八):桥接模式作者:Grey原文地址:博客园:设计模式学习(八):桥接模式CSDN:设计模式学习(八):桥接模式桥接模式桥接模式是一种结构型模式。它将抽象部分和实现部分分离,......
  • 基于时间线的 Feed 流设计
    本文将总结一下常用的基于时间线Feed流的后台存储设计方案。结合具体的业务场景,讲述一下根据实际需求,在基本设计思路上做一些灵活运用。一、背景介绍Feed流产品在我们手......
  • java 单例设计模式 懒汉式
    packagecom.tedu.test;/***单例设计模式懒汉式设计*优点:不会造成资源的浪费*缺点:会造成线程安全问题*/publicclasssingleonDemo{publicstatic......
  • 远程控制软件如何像素级还原设计稿色彩?
    今年3月,深圳的上班族贡献了一个名场面:扛电脑主机“跑毒”!上演万人大撤离!浩浩荡荡的扛主机队伍做出这番行为的背后原因很心酸:隔离和封楼随时都有可能,做好随时扛主机回家的......