数据仓库之分层 为什么分层 如何分层 和数据库的区别

数据仓库分层

  • 如何理解数仓
  • 为什么要设计数据分层
  • 通用的数据分层设计
  • 每层之间的界限又是什么?
  • 数据集市和数据仓库的区别
  • 数据库和数据仓库有什么区别?

如何理解数仓

  • 数据仓库就是整合多个数据源的历史数据进行细粒度的、多维度的分析,帮助高层管理者或者业务分析员做出决策。
  • 数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。

为什么要设计数据分层

  • 需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序
  • 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
  • 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能够更方便地定位和理解
  • 数据血缘追踪:当数据出现问题之后,快速准确地定位到问题,并清楚它的危害范围
  • 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
  • 统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径

通用的数据分层设计

  • 数据运营层 ODS、数据仓库层 DW(DWD、DWM、DWS)、数据应用层 APP、维表层

  • 数据运营层 ODS (Operational Data Store) 面向主题的

    • 接入的是原始数据,一般不做处理
    • 参考Sqoop导入的数据类型进行建模,Canal 监听 Mysql 的 Binlog,埋点日志,Flume,Kafka等
    • 在ODS层中,由于各端的开发团队不同PC端、H访问、小程序等或者各种其它问题,用户的访问日志被分成了好几张表上报到了我们的ODS层
  • 数据仓库层 DW ( Data Warehouse)

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

    • 数据明细层 DWD (Data Warehouse Detail)

      • 对ODS层数据做一定的清洗和主题汇总
      • DWD层做了一张用户访问行为日志表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,对部分枚举类型的值进行翻译,剔除异常数据,字段命名规范化、时间字段的统一,保证质量
      • 提高易用性,采用维度退化手法,将商品一二三级分类表,sku商品表,spu商品表,商品品牌表合并汇总为一张维度表!
    • 数据中间层 DWM (Data WareHouse Middle)

      • 对明细数据按照常用维度做初步的汇总
      • 选取业务关注的核心维度来做聚合操作,比如只保留人、商品、设备和页面区域维度计算出常用的统计指标:次数、时长。用户访问天表,用户登陆行为天表,订单行为天表
      • 对数据做轻度的聚合操作,生成中间表,提升公共指标的复用性,减少重复加工
    • 数据服务层 DWS (Data WareHouse Servce)

      • 又称数据集市或宽表
      • 将一个人在整个网站中的行为数据放到一张表中,构建商品、商铺、地址主题宽表,更多用户相关的指标:登陆次数、访问次数、添加购物车次数、购买商品数、购买不同商品数、购买金额,时间维度数据:天、月级的数据。
      • 按照业务划分,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
    • 在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表

    • dws和dwd是并行的

  • 数据应用层 APP (Application)

    • 面向业务定制的应用数据
    • 主要是提供给数据产品和数据分析使用的数据
    • 报表数据存放在这
  • 维表层 (Dimension)

    • 高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
    • 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。
  • 如下图,可以认为是一个电商网站的数据体系设计。我们暂且只关注用户访问日志这一部分数据。

    • 在ODS层中,由于各端的开发团队不同PC端、H访问、小程序等或者各种其它问题,用户的访问日志被分成了好几张表上报到了我们的ODS层
    • 为了方便大家的使用,我们在DWD层做了一张用户访问行为日志表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,对部分枚举类型的值进行翻译,剔除异常数据,保证质量
    • DWM层,选取业务关注的核心维度来做聚合操作,比如只保留人、商品、设备和页面区域维度,计算出常用的统计指标:次数、时长。用户访问天表,用户登陆行为天表,订单行为天表
    • 然后在DWS层,我们将一个人在整个网站中的行为数据放到一张表中,构建商品、商铺、地址主题宽表,更多用户相关的指标:登陆次数、访问次数、添加购物车次数、购买商品数、购买不同商品数、购买金额,时间维度数据:天、月级的数据。有了这张表,就可以快速满足大部分的通用型业务需求了。
    • 最后,在APP应用层,根据需求从DWS层的一张或者多张表取出数据拼接成一张应用表即可。

每层之间的界限又是什么?

  • 从对应用的支持来讲,我们希望越靠上层次,越对应用友好。比如APP层,基本是完全为应用来设计的,很易懂,DWS层的话,相对来讲就会有一点点理解成本,然后DWM和DWD层就比较难理解了,因为它的维度可能会比较多,而且一个需求可能要多张表经过很复杂的计算才能完成。
  • 从能力范围来讲,我们希望80%需求由20%的表来支持。直接点讲,就是大部分(80%以上)的需求,都用DWS的表来支持就行, DWS支持不了的,就用DWM和DWD的表来支持,这些都支持不了的极少一部分数据需要从原始日志中捞取。结合第一点来讲的话就是:80%的需求,我们都希望以对应用很友好的方式来支持,而不是直接暴露给应用方原始日志。
  • 从数据聚合程度来讲,我们希望,越上层数据的聚合程度越高,看上面的例子即可,ODS和DWD的数据基本是原始日志的粒度,不做任何聚合操作,DWM做了轻度的聚合操作只保留了通用的维度,DWS做了更高的聚合操作,可能只保留一到两个能表征当前描述主体的维度。从这个角度来看,我们又可以理解为我们是按照数据的聚合程度来划分数据层次的。

数据集市和数据仓库的区别

  • 数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段;
  • 数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的,

数据库和数据仓库有什么区别?

  • 面向主题特性,操作型数据库是为了支撑各种业务而建立,需要严格满足完整性等约束和范式设计要求,而分析型数据库则是为了对从各种繁杂业务中抽象出来的分析主题(如用户、成本、商品等)进行分析而建立,可以不满足第一范式
  • 集成性,数据仓库会将不同源数据库中的数据汇总到一起,比数据库更加庞大;
  • 范围性,数据仓库内的数据是面向公司全局的,数据库可能面向部门的
  • 历史性,数据仓库的时间跨度比较长,数据库可能保存几个月,数据仓库可能几年

你可能感兴趣的:(面试,数据仓库,数据仓库)