大数据分析中,有哪些常用的大数据分析模型?


我们已经知道,数据仓库中常见的两大建模体系有关系建模和维度建模。现在我们可以了解一下数据仓库中非常重要的内容:数仓分层。

一、数据集市(Data Mart)要理解数仓分层及各层作用,就应该了解一下数据集市的概念。

1、数据集市概念

数据集市也叫数据市场。为某个特殊的专业人员团体服务的数据源中收集数据的仓库。从范围上来说,数仓是从企业范围的,而数据集市是部门范围的。

数仓分层及各层作用,维度建模,宽表化

2、数据集市和数据仓库的主要区别

数据仓库

数据仓库是企业级的,能为整个企业各个部门的运行提供数据支持;

数据集市

则是一种微型的数据仓库,它通常支持更小的数据量,更少的主题区域,以及更少的历史数据,所以适合部门使用。

一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库

二、数仓分层思想

1、为什么要分层

  • 分层管理有利于分层工作
  • 通过数据预处理提高效率,优化应用系统用户体验(效率),简化数据清洗的过程,使每一层处理逻辑变得更简单。
  • 分层的处理逻辑都更为简单和容易理解,这样我们比较容易保证每一个步骤的正确性;
  • 当数据发生错误的时候,筛查错误步骤大大简化。

宏观抽象来说,数仓分层是一套让我们的数据体系更有序的行之有效的数据组织和管理方法。

2、数仓分层带来如下的好处:

  • 数据结构化更清晰

每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。

  • 数据血缘追踪

提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。

  • 增强数据复用能力

减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率。

  • 简化复杂的问题

把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

  • 减少业务的影响

业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。

  • 统一数据口径

通过数据分层,提供统一的数据出口,统一对外输出的数据口径。3、数仓分层的目的

分层就能解决业务上所有的数据问题?

  • 数仓分层尽管给数仓带来了很多好处,但它不是万能的,不能解决所有的数据问题;
  • 没有绝对标准的数仓。不同的公司针对不同的业务搭建数仓的设计模型和分层一般也不一样。
  • 数仓分层要结合企业的实际来设计。

数仓的搭建设计是由关系型业务应用系统到面向主题的数据仓库系统,从范式建模到维度建模的必经之路。

三、数仓分层及各层作用

数仓中常见的层级如下:

数仓分层及各层作用,维度建模,宽表化

1、ODS(Operation Data Store)这层字面意思叫操作型数据存储,存储来自多个业务系统、前端埋点、爬虫获取等的一系列数据源的数据。

  • 又叫“贴源层”,这层保持数据原貌不做任何修改,保留历史数据,储存起到备份数据的作用。
  • 数据一般采用lzo、Snappy、parquet等压缩格式,减少磁盘存储空间(例如:原始数据 10G,根据算法可以压缩到 1G 左 右)。
  • 创建分区表,防止后续的全表扫描,减少集群资源访问数仓的压力,一般按天存储在数仓中。

有些公司还会把ODS层再细分两层:STG:数据缓冲层,存原始数据;ODS:对STG层简单清洗后的数据。

2、DW(Data Warehouse)数仓主体层从ODS层中获得的数据按照主题建立各种数据模型。又细分为以下几层:2.1、DWD(Data Warehouse Detail)明细粒度事实层:是以业务过程来作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表(注意是最细粒度)。需要结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表

  • 这层维度建模主要做的4个步骤:
  • 数仓分层及各层作用,维度建模,宽表化
  • ODS到DWD层,需要对数据进行清洗做ETL操作(ETL是英文Extract-Transform-Load的缩写)。

ETL(Extract-Transform-Load)

将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程。

目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。

  • 主要的数据处理是:去空值、去极值(比方取款300亿)、去业务极值、部分数据脱敏、维度退化等即对业务数据传过来的表进行维度退化和降维(如:商品一级二级、省市县、年月日等)。

2.2、DWS(Data Warehouse Service)

  • 使轻度汇总层,从ODS层中对用户的行为做一个初步的汇总,抽象出来一些通用的维度:时间、ip、id,并根据这些维度做一些统计值。
  • 这里做轻度的汇总会让以后的计算更加的高效,如:统计各个主题对象计算7天、30天、90天的行为, 应对特殊需求(例如,购买行为,统计商品复购率)会快很多不必走ODS层反复拿数据做加工。
  • 这层以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。
  • 服务于 DWT 层的主题宽表,以及一些业务明细数据。

2.3、DWT(Data Warehouse Topic)以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。就是按照维度来决定分析者的角度,如:某用户从注册登录后下了多少订单。

2.4、DIM(Dimension)以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性、关联维度等定义计算逻辑,完成属性定义的过程并建立一致的数据分析维表。为了避免在维度模型中冗余关联维度的属性,基于雪花模型构建维度表。维度层的表通常也被称为维度逻辑表。

  • 高基数维度数据一般是用户资料表、商品资料表等类似的资料表。数据量可能是千万级或者上亿级别。
  • 低基数维度数据一般是配置表,比如枚举值对应的中文含义,比如国家、城市、县市、街道等维表。数据量可能是个位数或者几千几万。

3、ADS(Application Data Store)供给业务使用的数据层,这层是面向业务定制的应用数据层。

  • 这一层是提供为数据产品使用的结果数据。
  • 在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、MySQL等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 、kill中供数据分析和数据挖掘使用。如我们经常说的报表数据,或者说那种大宽表化,一般就放在这里。

4、DM(Data Mart)

数据集市层,上面已经讨论过数据集市的概念,这层就是对不同的主题域,对某个单独业务或者部门专门设立的小型数据集市。
下一篇会精选了几个大厂的数仓分层架构的典型代表,来加深对数仓分层架构的理解、希望对我们设计和构建数仓分层模型,能有所借鉴或启迪。

Q:数仓分几层适合?有没有统一的标准

A 我们设计数仓分层的时候,要考虑到实体的需要和实际情况来考虑数仓分层及各层作用。如果你负责的仅仅是一个小部门的数据,而公司已经有一个数仓平台了。那么你或许仅需要构建一个你自己的应用层,或者集市层,根本无需分层。如果一般大的公司有公共IT部门,该部门会构建统一数仓,如主数据,如统一交易表,统一埋点或者标准维度表等。当然大一点的事业群或者事业部会构建自己的数仓层,有一些部门特有的业务数据。可以构建简单三层模型即ODS + DW + ADS。