首页 > 其他分享 >hive 数据仓库分层

hive 数据仓库分层

时间:2023-04-06 17:24:50浏览次数:38  
标签:Data ODS 数据仓库 hive 分层 表中 维度 数据

1:为什么要分层

 大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。如下图,在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系

我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层。数据分层并不能解决所有的数据问题

2:数仓的三层结构

我们将数据模型分为三层:数据运营层( ODS )、数据仓库层(DW)和数据应用层(APP):

  • ODS层存放的是接入的原始数据

  • DW层是存放我们要重点设计的数据仓库中间层数据

  • APP是面向业务定制的应用数据。

1、数据运营层:ODS(Operational Data Store)

  “面向主题的”数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。

  一般来讲,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。

2、数据仓库层:DW(Data Warehouse)

  数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从 ODS 层中获得的数据按照主题建立各种数据模型。DW层又细分为 DWD(Data Warehouse Detail)层、DWM(Data WareHouse Middle)层和DWS(Data WareHouse Servce)层。

  • 1)数据明细层:DWD(Data Warehouse Detail) 该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。 另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性,后文会举例说明。

  • 2)数据中间层:DWM(Data WareHouse Middle) 该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。 直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标

  • 3)数据服务层:DWS(Data WareHouse Servce) 又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。

  一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。

3、数据应用层:APP(Application)

  在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、PostgreSql、Redis等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。比如我们经常说的报表数据,一般就放在这里。

总结

ODS层: 源数据层
    作用: 对接数据源, 和数据源的数据保持相同的粒度(将数据源的数据完整的拷贝到ODS层中)
    注意:
        如果数据来源于文本文件, 可能会需要先对这些文本文件进行预处理(spark)操作, 将其中不规则的数据, 不完整的数据, 脏乱差的数据先过滤掉, 将其转换为一份结构化的数据, 然后灌入到ODS层
    
    一般放置 事实表数据和少量的维度表数据
DW层:  数据仓库层
    DWD层: 明细层
        作用: 用于对ODS层数据进行清洗转换工作 , 以及进行少量的维度退化操作
                少量: 
                    1) 将多个事实表的数据合并为一个事实表操作
                    2) 如果维度表放置在ODS层 一般也是在DWD层完成维度退化
    DWM层: 中间层
        作用:  1) 用于进行维度退化操作  2) 用于进行提前聚合操作(周期快照事实表)
    DWS层: 业务层
        作用: 进行细化维度统计分析操作
DA层:  数据应用层
    作用: 存储基于DWS层再次分析的结果, 用于对接后续的应用(图表, 推荐系统...)
    例如:
        比如DWS层的数据表完成了基于订单表各项统计结果信息,  但是图表只需要其中销售额, 此时从DWS层将销售额的数据提取出来存储到DA层
​
DIM层: 维度层
    作用: 存储维度表数据
​
​
什么叫做维度退化: 是为了减少维度表的关联工作
    做法: 将数据分析中可能在维度表中需要使用的字段, 将这些字段退化到事实表中, 这样后续在基于维度统计的时候, 就不需要在关联维度表, 事实表中已经涵盖了维度数据了
    例如: 订单表, 原有订单表中只有用户id, 当我们需要根据用户维度进行统计分析的时候, 此时需要关联用户表, 找到用户的名称, 那么如果我们提前将用户的名称放置到订单表中, 那么是不是就不需要关联用户表, 而则就是维度退化
    
    好处: 减少后续分析的表关联情况
    弊端: 造成数据冗余

 

 

标签:Data,ODS,数据仓库,hive,分层,表中,维度,数据
From: https://www.cnblogs.com/Live-up-to-your-youth/p/17293444.html

相关文章

  • hive Serde(默认)
    Hive读文件机制首先调用InputFormat(默认TextFormat),返回一条一条的键值对记录(默认是一行对一行键值对)。然后用Serde(默认为LazySimpleSerde)的Deserializer,将一条记录的value根据分隔符切分为各个字段。HDFSfilesInputFileFormat<key,value>DeserizlizerRowobject......
  • Hadoop、Hive和Spark的关系
    大数据技术生态中,Hadoop、Hive、Spark是什么关系?|通俗易懂科普向Hadoop、Hive和Spark,都是大数据相关的系统和技术。大数据也是数据管理系统的范畴。数据管理系统涉及两个方面的问题,一个是数据怎么存储?一个是数据怎么计算?为了方便理解,我们需要从单机的时代来讲解。在单机的数......
  • [FAQ] Pytorch PytorchStreamReader failed reading zip archive
     比如:rm-rf~/.cache/huggingface  Link:https://www.cnblogs.com/farwish/p/17290240.html......
  • CDH+Hive部署
    CDH介绍:  CDH全称Cloudera’sDistributionIncludingApacheHadoop,是Cloudera公司提供的一个ApacheHadoop发行版。CDH将Hadoop与其他十几个关键的开源项目集成,并且加入了集群自动化安装、中心化管理、集群监控、报警等功能。Hive介绍:  Hive是基于Hadoop的一......
  • Hive 如何巧用分布函数percent_rank()剔除极值求均值
    场景描述前期写过一篇关于剔除订单极值求订单均值的案例,之前使用的是 dense_rank 函数对订单金额进行排序后,过滤掉最大值最小值后进行处理,最近工作刚好使用到分布函数percent_rank,想起来应该也可以用到这个场景;percent_rank()简介percent_rank()函数为分布函数,用于返回某个......
  • php swoft 中的数据分层
        不仅仅局限于MVC。将数据在model这一个层面剖析开,优雅的处理数据 逻辑,缓存,业务,数据库操作的烦恼。 这个思路也适用于thinkphp,hyperf,imi等框架。不再简单的实现controller->model->view的处理过程。  简化代码,每一层清晰地定义相应处理的数据。......
  • hive 优化
    hive优化`--合并小文件sethive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;--sethive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;setmapreduce.input.fileinputformat.split.minsize=256000000;setmapreduce.input.filein......
  • Hive 和 Spark 分区策略剖析
    作者:vivo互联网搜索团队-DengJie随着技术的不断的发展,大数据领域对于海量数据的存储和处理的技术框架越来越多。在离线数据处理生态系统最具代表性的分布式处理引擎当属Hive和Spark,它们在分区策略方面有着一些相似之处,但也存在一些不同之处。一、概述随着技术的不断的发展,大数据......
  • Hive 和 Spark 分区策略剖析
    作者:vivo互联网搜索团队-DengJie随着技术的不断的发展,大数据领域对于海量数据的存储和处理的技术框架越来越多。在离线数据处理生态系统最具代表性的分布式处理引擎当属Hive和Spark,它们在分区策略方面有着一些相似之处,但也存在一些不同之处。一、概述随着技术的不断的发展......
  • 实体类的分层设计
    在实际开发中,为了传递参数方便或保护数据安全或组合复杂的参数等,有时会对实体类进行分层设计,经常把实体类分为VO、DTO、DO和PO等对象。⚫VO(ViewObject):视图对象,用于展示层,指把某个指定页面(或组件)需要的所有数据封装起来;⚫DTO(DataTransferObject):数据传输对象,用于展......